Windows 7 기반 컴퓨터에서 VAMT 2.0에서 목록을 열 때 "동일한 키가 있는 항목이 이미 추가되었습니다." 오류
이 문서는 볼륨 정품 인증 관리 도구(VAMT) 2.0에서 목록을 열 때 발생하는 오류(동일한 키가 있는 항목이 이미 추가됨)를 해결하는 데 도움이 됩니다.
적용 대상: Windows 7 서비스 팩 1
원래 KB 번호: 2383895
증상
Windows 7 기반 컴퓨터의 VAMT 2.0에서 목록(.cil
)을 열면 다음 오류 메시지가 표시될 수 있습니다.
키가 같은 항목이 이미 추가되었습니다.
원인
이 문제는 컴퓨터에 여러 네트워크 어댑터가 있고 이러한 네트워크 어댑터에 동일한 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>
해결 방법
이 문제를 resolve 위해 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
이 KB 문서의 포함된 소스 코드를 클립보드에 복사합니다.
시작, 모든 프로그램, 액세서리, 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 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기