Ошибка "Элемент с тем же ключом уже добавлен" при открытии списка в VAMT 2.0 на компьютере под управлением Windows 7
Эта статья поможет устранить ошибку (элемент с тем же ключом уже добавлен), которая возникает при открытии списка в средство управления активацией корпоративных лицензий (VAMT) 2.0.
Применяется к: Windows 7 с пакетом обновления 1 (SP1)
Исходный номер базы знаний: 2383895
Симптомы
При открытии списка (.cil
) в VAMT 2.0 на компьютере под управлением Windows 7 может появилось следующее сообщение об ошибке:
Элемент с тем же ключом уже был добавлен
Причина
Эта проблема может возникнуть, если на компьютере есть несколько сетевых адаптеров и эти сетевые адаптеры имеют одинаковый MAC-адрес. Например, эта проблема может возникнуть, если у вас есть два сетевых адаптера для виртуальной машины и вы настроили эти сетевые адаптеры на один и тот же MAC-адрес.
Если открыть CIL-файл в этой ситуации, появится запись, похожая на следующую:
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>
Разрешение
Чтобы устранить эту проблему, вручную удалите повторяющиеся записи из CIL или, чтобы автоматизировать этот процесс, используйте следующий исходный код для создания скрипта PowerShell для автоматизации.
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);
Затем выполните следующие действия на компьютере с Windows 7:
Скопируйте сохраненный CIL-файл в c:\script. Например, c:\script\saved.cil
Скопируйте включенный исходный код из этой статьи базы знаний в буфер обмена
Щелкните Пуск, Все программы, Стандартные, Windows PowerShell, "Windows PowerShell ise"
В Windows PowerShell щелкните в окне Untitled1.ps1
Вставка содержимого скрипта из этой статьи
Щелкните Файл, сохранить как, c:\script\ScrubCil.ps1
Щелкните Запустить > все программы > Стандартные > Windows PowerShell, щелкните правой кнопкой мыши "Windows PowerShell" и выберите "Запуск от имени администратора".
В командной строке PowerShell введите следующие команды.
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Сбор данных
Если вам нужна помощь службы поддержки Microsoft, мы рекомендуем собирать информацию путем выполнения действий, описанных в разделе Сбор информации с помощью TSS для решения проблем, связанных с развертыванием.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по