Erreur « Un élément avec la même clé a déjà été ajouté » lorsque vous ouvrez une liste dans VAMT 2.0 sur un ordinateur Windows 7

Cet article vous aide à corriger une erreur (un élément avec la même clé a déjà été ajouté) qui se produit lorsque vous ouvrez une liste dans Outil Gestion de l'activation en volume (VAMT) 2.0.

S’applique à :Windows 7 Service Pack 1
Numéro de la base de connaissances d’origine : 2383895

Symptômes

Lorsque vous ouvrez une liste (.cil) dans VAMT 2.0 sur un ordinateur Windows 7, le message d’erreur suivant peut s’afficher :

Un élément avec la même clé a déjà été ajouté.

Cause

Ce problème peut se produire s’il existe plusieurs cartes réseau sur l’ordinateur et que ces cartes réseau ont la même adresse MAC. Par exemple, ce problème peut se produire si vous avez deux cartes réseau pour une machine virtuelle et que vous configurez ces cartes réseau pour qu’elles aient la même adresse MAC.

Si vous ouvrez le fichier CIL dans ce cas, vous voyez une entrée qui ressemble à ce qui suit :

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>

Résolution

Pour résoudre ce problème, supprimez manuellement les entrées dupliquées du CIL ou pour automatiser ce processus, utilisez le code source suivant pour créer un script PowerShell à automatiser.


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);

Ensuite, procédez comme suit sur un ordinateur Windows 7 :

  1. Copiez votre fichier CIL enregistré dans c :\script. Par exemple, c :\script\saved.cil

  2. Copiez le code source inclus de cet article de la Base de connaissances dans le Presse-papiers

  3. Cliquez sur Démarrer, Tous les programmes, Accessoires, Windows PowerShell, « Windows PowerShell ise »

  4. Dans Windows PowerShell, cliquez dans la fenêtre Untitled1.ps1

  5. Coller le contenu du script de cet article

  6. Cliquez sur Fichier, enregistrer sous, c:\script\ScrubCil.ps1

  7. Cliquez sur Démarrer > tous les accessoires > de programmes > Windows PowerShell, cliquez avec le bouton droit sur « Windows PowerShell », puis choisissez « Exécuter en tant qu’administrateur ».

  8. À l’invite PowerShell, tapez les commandes suivantes

    cd\script
    set-executionpolicy unrestricted
    .\ScrubCil.ps1 saved.cil
    

Collecte de données

Si vous avez besoin de l’aide du support Microsoft, nous vous recommandons de collecter les informations en suivant les étapes mentionnées dans Collecter des informations à l’aide de TSS pour les problèmes liés au déploiement.