Erro "Um item com a mesma chave já foi adicionado" ao abrir uma lista no VAMT 2.0 em um computador baseado no Windows 7
Este artigo ajuda a corrigir um erro (um item com a mesma chave já foi adicionado) que ocorre quando você abre uma lista no Ferramenta de Gerenciamento de Ativação de Volume (VAMT) 2.0.
Aplica-se a: Windows 7 Service Pack 1
Número de KB original: 2383895
Sintomas
Ao abrir uma lista (.cil
) no VAMT 2.0 em um computador baseado no Windows 7, você poderá receber a seguinte mensagem de erro:
Um item com a mesma chave já foi adicionado.
Motivo
Esse problema poderá ocorrer se houver vários adaptadores de rede no computador e esses adaptadores de redes tiverem o mesmo endereço MAC. Por exemplo, esse problema pode ocorrer se você tiver dois adaptadores de rede para uma máquina virtual e configurar esses adaptadores de rede para ter o mesmo endereço MAC.
Se você abrir o arquivo CIL nesta situação, verá uma entrada que se assemelha ao seguinte:
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>
Resolução
Para resolve esse problema, exclua manualmente as entradas duplicadas do CIL ou para automatizar esse processo, use o código-fonte a seguir para criar um script do PowerShell para automatizar.
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);
Em seguida, siga estas etapas em um computador Windows 7:
Copie o arquivo CIL salvo para c:\script. Por exemplo, c:\script\saved.cil
Copie o código-fonte incluído deste artigo KB na área de transferência
Clique em Iniciar, Todos os Programas, Acessórios, Windows PowerShell, "Windows PowerShell ise"
Em Windows PowerShell, clique na janela Untitled1.ps1
Cole o conteúdo do script deste artigo
Clique em Arquivo, salvar como, c:\script\ScrubCil.ps1
Clique em Iniciar > Todos os Programas acessórios >> Windows PowerShell, clique com o botão direito do mouse em "Windows PowerShell" e escolha "Executar como Administrador"
No tipo de prompt do PowerShell, os comandos a seguir
cd\script set-executionpolicy unrestricted .\ScrubCil.ps1 saved.cil
Coleta de dados
Se você precisar de ajuda do suporte da Microsoft, recomendamos coletar as informações seguindo as etapas mencionadas em Coletar informações usando o TSS para problemas relacionados à implantação.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários