文章编号: 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>

解决方案

若要让我们为您从 .CIL 文件中删除重复项,请转到“帮我修复此问题”部分。如果您希望自己从 .CIL 文件中删除重复项,请转到“我自己修复此问题”部分。

帮我修复此问题



若要自动修复此问题,请单击“Fix it”按钮或链接。然后单击“文件下载”对话框中的“运行”,并执行“Fix it”向导中的步骤。


修复此问题
Microsoft Fix it 50785


注意
  • 请选择要删除重复项的 .CIL 文件。
  • 如果 VAMT(批量激活管理工具)2.0 未在默认路径下安装,则 Fix it 解决方案不适用。
  • 该向导可能只有英文版本。但是自动修复功能同样适用于其他语言版本的 Windows。
  • 如果所使用的计算机中并未出现此问题,则可将 Fix it 解决方案保存至闪存驱动器或 CD 中,然后在出现此问题的计算机上运行该解决方案。

然后转到“问题是否已修复?”部分。



我自己修复此问题

若要解决此问题,请手动从 .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 计算机上执行以下步骤:
  1. 将已保存的 .CIL 文件复制到 c:\script。例如 c:\script\saved.cil
  2. 将包含的源代码从本知识库文章中复制到剪贴板中
  3. 依次单击“开始”、“所有程序”、“附件”、“Windows Powershell”、“Windows powershell ise”
  4. 在 Windows PowerShell 中,在 Untitled1.ps1 窗口中单击
  5. 粘贴本文中的脚本内容
  6. 依次单击“文件”,另存为“c:\script\ScrubCil.ps1”
  7. 依次单击“开始”、“所有程序”、“附件”、“Windows Powershell”,右键单击“Windows powershell”,然后选择“以管理员身份运行”
  8. 在 powershell 提示符处键入以下命令
    cd \script
    set-executionpolicy unrestricted
    .\ScrubCil.ps1 saved.cil


问题是否已修复?

  • 检查问题是否已修复。如果问题已修复,您不用再往下看了。如果问题没有修复,您可以联系技术支持部门
  • 如果您能提供反馈,我们将不胜感激。若要提供反馈意见或报告使用此解决方案出现的任何问题,请在“帮我修复此问题”博客中留言或向我们发送电子邮件

属性

文章编号: 2383895 - 最后修改: 2011年12月20日 - 修订: 2.0
这篇文章中的信息适用于:
  • Windows 7 Enterprise
关键字:?
kbfixme kbmsifixme KB2383895
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com