Errore "Un elemento con la stessa chiave è già stato aggiunto" quando si apre un elenco in VAMT 2.0 in un computer basato su Windows 7
Questo articolo consente di correggere un errore (è già stato aggiunto un elemento con la stessa chiave) che si verifica quando si apre un elenco in Strumento di gestione dell'attivazione dei contratti multilicenza (VAMT) 2.0.
Si applica a: Windows 7 Service Pack 1
Numero KB originale: 2383895
Sintomi
Quando si apre un elenco (.cil
) in VAMT 2.0 in un computer basato su Windows 7, è possibile che venga visualizzato il messaggio di errore seguente:
È già stato aggiunto un elemento con la stessa chiave
Causa
Questo problema può verificarsi se nel computer sono presenti più schede di rete e queste schede di rete hanno lo stesso indirizzo MAC. Ad esempio, questo problema può verificarsi se si dispone di due schede di rete per una macchina virtuale e si configurano queste schede di rete in modo che abbiano lo stesso indirizzo MAC.
Se si apre il file CIL in questa situazione, viene visualizzata una voce simile alla seguente:
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>
Risoluzione
Per risolvere il problema, eliminare manualmente le voci duplicate dal CIL o automatizzare questo processo, usare il codice sorgente seguente per creare uno script di PowerShell per automatizzare.
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);
Seguire quindi questa procedura in un computer Windows 7:
Copiare il file CIL salvato in c:\script. Ad esempio, c:\script\saved.cil
Copiare il codice sorgente incluso da questo articolo della Knowledge Base negli Appunti
Fare clic su Start, Tutti i programmi, Accessori, Windows PowerShell, "Windows PowerShell ise"
In Windows PowerShell fare clic nella finestra Untitled1.ps1
Incollare il contenuto dello script da questo articolo
Fare clic su File, salva con nome c:\script\ScrubCil.ps1
Fare clic su Avvia > tutti i programmi > accessori > Windows PowerShell, fare clic con il pulsante destro del mouse su "Windows PowerShell" e scegliere "Esegui come amministratore"
Al prompt di PowerShell digitare i comandi seguenti
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Raccolta dei dati
Se è necessaria l'assistenza del supporto tecnico Microsoft, si consiglia di raccogliere le informazioni seguendo i passaggi indicati in Raccogliere informazioni utilizzando TSS per le questioni relative alla distribuzione.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per