Windows 7 tabanlı bir bilgisayarda VAMT 2.0'da liste açtığınızda "Aynı anahtara sahip bir öğe zaten eklendi" hatası
Bu makale, bir listeyi Toplu Etkinleştirme Yönetim Aracı (VAMT) 2.0'da açtığınızda oluşan bir hatayı (aynı anahtara sahip bir öğe zaten eklenmiş) düzeltmeye yardımcı olur.
Şunlar için geçerlidir: Windows 7 Service Pack 1
Özgün KB numarası: 2383895
Belirtiler
Bir listeyi (.cil
) Windows 7 tabanlı bir bilgisayarda VAMT 2.0'da açtığınızda aşağıdaki hata iletisini alabilirsiniz:
Aynı anahtara sahip bir öğe zaten eklenmiş.
Neden
Bilgisayarda birden çok ağ bağdaştırıcısı varsa ve bu ağ bağdaştırıcıları aynı MAC adresine sahipse bu sorun oluşabilir. Örneğin, bir sanal makine için iki ağ bağdaştırıcınız varsa ve bu ağ bağdaştırıcılarını aynı MAC adresine sahip olacak şekilde yapılandırdıysanız bu sorun oluşabilir.
Bu durumda CIL dosyasını açarsanız, aşağıdakine benzer bir girdi görürsünüz:
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>
Çözüm
Bu sorunu çözmek için, yinelenen girdileri CIL'den el ile silin veya bu işlemi otomatikleştirmek için aşağıdaki kaynak kodu kullanarak otomatikleştirmek üzere bir PowerShell betiği oluşturun.
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);
Ardından bir Windows 7 bilgisayarında şu adımları izleyin:
Kaydedilen CIL dosyanızı c:\script dosyasına kopyalayın. Örneğin, c:\script\saved.cil
Bu KB makalesindeki dahil edilen kaynak kodunu panoya kopyalayın
Başlat, Tüm Programlar, Aksesuarlar, Windows PowerShell, "Windows PowerShell ise" seçeneğine tıklayın
Windows PowerShell'da Untitled1.ps1 penceresine tıklayın
Bu makaledeki betiğin içeriğini yapıştırın
Dosya'ya tıklayın, farklı kaydet'e c:\script\ScrubCil.ps1
Tüm Programlar Donatılarını >> Başlat'a > tıklayın Windows PowerShell, "Windows PowerShell" seçeneğine sağ tıklayın ve "Yönetici Olarak Çalıştır" seçeneğini belirleyin
PowerShell komut istemi türünde aşağıdaki komutlar
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Veri toplama
Microsoft destek ekibinden yardım almaya ihtiyacınız varsa Dağıtımla ilgili sorunlar için TSS kullanarak bilgi toplama bölümünde belirtilen adımları izleyerek bilgi toplamanızı öneririz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin