Fout 'Er is al een item met dezelfde sleutel toegevoegd' wanneer u een lijst opent in VAMT 2.0 op een computer met Windows 7
Dit artikel helpt bij het oplossen van een fout (een item met dezelfde sleutel is al toegevoegd) dat optreedt wanneer u een lijst opent in Hulpprogramma voor volumeactivering (VAMT) 2.0.
Van toepassing op: Windows 7 Service Pack 1
Origineel KB-nummer: 2383895
Symptomen
Wanneer u een lijst (.cil
) opent in VAMT 2.0 op een computer met Windows 7, wordt mogelijk het volgende foutbericht weergegeven:
Er is al een item met dezelfde sleutel toegevoegd.
Oorzaak
Dit probleem kan optreden als er meerdere netwerkadapters in de computer zijn en deze netwerkadapters hetzelfde MAC-adres hebben. Dit probleem kan bijvoorbeeld optreden als u twee netwerkadapters voor een virtuele machine hebt en u deze netwerkadapters configureert om hetzelfde MAC-adres te hebben.
Als u het CIL-bestand in deze situatie opent, ziet u een vermelding die er ongeveer als volgt uitziet:
NetworkName="
contoso.com
" Id="e3f3f83c-f050-4d81-9117-xx">
<MacAddresses>
<MacAddress>00:11:11:CF:FC:xx</MacAddress>
<MacAddress>00:11:11:CF:FC:xx</MacAddress>
</MacAddresses>
Oplossing
Als u dit probleem wilt oplossen, verwijdert u de dubbele vermeldingen handmatig uit de CIL of gebruikt u de volgende broncode om een PowerShell-script te maken om te automatiseren.
param($inputFilePath, $vamtDirPath)
$cilFilePath = Resolve-Path $inputFilePath;
if (!$cilFilePath)
{
Write-Error "Expected input file name of target CIL";
exit 1;
}
if ($vamtDirPath)
{
$vamtDirPath = Resolve-Path $vamtDirPath;
}
else
{
$prograPath = [environment]::GetEnvironmentVariable("ProgramFiles(x86)");
if (!$prograPath -or $prograPath -eq "")
{
$prograPath = [environment]::GetEnvironmentVariable("ProgramFiles");
}
$vamtDirPath = $prograPath + "\VAMT 2.0"
}
try
{
$assembly = [System.Reflection.Assembly]::LoadFile($vamtDirPath + "\Vamtrt.dll");
}
catch
{
Write-Error "Error while attempting to load VAMT assembly. Provide the correct path to your VAMT installation if VAMT is not installed to the default directory.";
exit 1;
}
$fileSerializer = new-object Microsoft.SoftwareLicensing.Vamt.FileSerializer($cilFilePath);
$softwareLicensingData = $fileSerializer.Deserialize();
for ($i = 0; $i -lt $softwareLicensingData.Machines.Length; $i++)
{
$machine = $softwareLicensingData.Machines[$i];
if ($machine.MacAddresses.Count -gt 0)
{
$distinctMacAddrs = new-object System.Collections.ObjectModel.Collection[string];
foreach ($mac in $machine.MacAddresses)
{
if (!$distinctMacAddrs.Contains($mac))
{
$distinctMacAddrs.Add($mac);
}
}
$machine.MacAddresses.Clear();
foreach ($distinctMac in $distinctMacAddrs)
{
$machine.MacAddresses.Add($distinctMac);
}
}
}
$fileSerializer.Serialize($softwareLicensingData);
Voer vervolgens deze stappen uit op een Windows 7-computer:
Kopieer het opgeslagen CIL-bestand naar c:\script. Bijvoorbeeld c:\script\saved.cil
Kopieer de opgenomen broncode van dit KB-artikel naar het Klembord
Klik op Start, Alle programma's, accessoires, Windows PowerShell, 'Windows PowerShell ise'
Klik in Windows PowerShell in het Untitled1.ps1-venster
Inhoud van het script uit dit artikel plakken
Klik op Bestand, opslaan als c:\script\ScrubCil.ps1
Klik op Alle > programma-accessoires >> starten Windows PowerShell, klik met de rechtermuisknop op 'Windows PowerShell' en kies Als administrator uitvoeren
Bij het PowerShell-prompttype worden de volgende opdrachten uitgevoerd
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Gegevensverzameling
Als u hulp nodig hebt van Microsoft-ondersteuning, raden we u aan de informatie te verzamelen door de stappen te volgen die worden vermeld in Informatie verzamelen met behulp van TSS voor implementatiegerelateerde problemen.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor