Felet "Ett objekt med samma nyckel har redan lagts till" visas när du öppnar en lista i VAMT 2.0 på en Windows 7-baserad dator
Den här artikeln hjälper dig att åtgärda ett fel (ett objekt med samma nyckel har redan lagts till) som inträffar när du öppnar en lista i Volume Activation Management Tool (VAMT) 2.0.
Gäller för:Windows 7 Service Pack 1
Ursprungligt KB-nummer: 2383895
Symptom
När du öppnar en lista (.cil
) i VAMT 2.0 på en Windows 7-baserad dator kan följande felmeddelande visas:
Ett objekt med samma nyckel har redan lagts till.
Orsak
Det här problemet kan uppstå om det finns flera nätverkskort på datorn och dessa nätverkskort har samma MAC-adress. Det här problemet kan till exempel inträffa om du har två nätverkskort för en virtuell dator och du konfigurerar dessa nätverkskort så att de har samma MAC-adress.
Om du öppnar CIL-filen i den här situationen ser du en post som liknar följande:
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>
Åtgärd
Lös problemet genom att manuellt ta bort dubblettposterna från CIL eller automatisera den här processen genom att använda följande källkod för att skapa ett PowerShell-skript för att automatisera.
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);
Följ sedan dessa steg på en Windows 7-dator:
Kopiera den sparade CIL-filen till c:\script. Till exempel c:\script\saved.cil
Kopiera den inkluderade källkoden från den här KB-artikeln till Urklipp
Klicka på Start, Alla program, Tillbehör, Windows PowerShell, "Windows PowerShell ise"
I Windows PowerShell klickar du i fönstret Untitled1.ps1
Klistra in innehållet i skriptet från den här artikeln
Klicka på Arkiv, spara som c:\script\ScrubCil.ps1
Klicka på Starta > alla programtillbehör >> Windows PowerShell, högerklicka på "Windows PowerShell" och välj "Kör som administratör"
I PowerShell-prompten skriver du följande kommandon
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Datainsamling
Om du behöver hjälp från Microsofts support rekommenderar vi att du samlar in informationen genom att följa stegen i Samla in information med hjälp av TSS för distributionsrelaterade problem.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för