Błąd "Element o tym samym kluczu został już dodany" podczas otwierania listy w narzędziu VAMT 2.0 na komputerze z systemem Windows 7
Ten artykuł pomaga naprawić błąd (element o tym samym kluczu został już dodany), który występuje po otwarciu listy w Narzędzie do zarządzania aktywacją zbiorczą (VAMT) 2.0.
Dotyczy: Windows 7 z dodatkiem Service Pack 1
Oryginalny numer KB: 2383895
Symptomy
Po otwarciu listy (.cil
) w narzędziu VAMT 2.0 na komputerze z systemem Windows 7 może zostać wyświetlony następujący komunikat o błędzie:
Element o tym samym kluczu został już dodany.
Przyczyna
Ten problem może wystąpić, jeśli na komputerze znajduje się wiele kart sieciowych, a te karty sieciowe mają ten sam adres MAC. Na przykład ten problem może wystąpić, jeśli masz dwie karty sieciowe dla maszyny wirtualnej i skonfigurujesz te karty sieciowe tak, aby miały ten sam adres MAC.
Po otwarciu pliku CIL w tej sytuacji zostanie wyświetlony wpis podobny do następującego:
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>
Rozwiązanie
Aby rozwiązać ten problem, ręcznie usuń zduplikowane wpisy z CIL lub w celu zautomatyzowania tego procesu, użyj następującego kodu źródłowego, aby utworzyć skrypt programu PowerShell do automatyzacji.
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);
Następnie wykonaj następujące kroki na komputerze z systemem Windows 7:
Skopiuj zapisany plik CIL do pliku c:\script. Na przykład c:\script\saved.cil
Skopiuj dołączony kod źródłowy z tego artykułu KB do schowka
Kliknij przycisk Start, Wszystkie programy, akcesoria, Windows PowerShell, "Windows PowerShell ise"
W Windows PowerShell kliknij okno Untitled1.ps1
Wklej zawartość skryptu z tego artykułu
Kliknij pozycję Plik, zapisz jako, c:\script\ScrubCil.ps1
Kliknij pozycję Uruchom > wszystkie programy > Akcesoria > Windows PowerShell, kliknij prawym przyciskiem myszy pozycję "Windows PowerShell" i wybierz pozycję "Uruchom jako administrator"
W typie wiersza polecenia programu PowerShell następujące polecenia
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Zbieranie danych
Jeśli potrzebujesz pomocy ze strony pomocy technicznej firmy Microsoft, zalecamy zebranie informacji, wykonując kroki wymienione w artykule Zbieranie informacji przy użyciu zestawu narzędzi TSS w przypadku problemów związanych z wdrożeniem.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla