我正在使用 Codeplex 中的 HyperV 模块从 2008R2 Hyper-V 服务器执行“仅配置”导出。为了导入另一台 HyperV 服务器上的配置,我需要编辑 EXP 文件中 CopyVMStorage 的值。该文件是一个 XML 文件。我在 PowerShell 中编写了以下代码来为我进行更新。变量 $existing 是现有的 exp 文件。
$xml = [xml](get-content $existing)
$xpath = '//PROPERTY[@NAME ="CopyVmStorage"]'
foreach ($node in $xml.SelectNodes($xpath))
{$node.Value = 'TRUE'}
$xml.Save($existing)
此代码对 XML 进行了正确的更改。但是,当我在 Hyper-V 服务器上导入文件时,收到一条错误消息:“文件格式不正确”。我想知道文件的编码是否不正确或者是否存在其他问题。如果我在写字板中手动编辑文件,则导入不会出现问题。
我注意到使用 PowerShell 更新的文件是格式化的,而原始文件是 xml,所有文件都挤在一起,没有空格。
关于此 HyperV 错误消息中的“文件格式”可能意味着什么,以及如何使用我的代码自动执行 XML 中的此更改并能够使用它导入虚拟机配置,有什么想法吗?
XML之前
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<DECLARATIONS>
<DECLGROUP>
<VALUE.OBJECT><INSTANCE CLASSNAME="Msvm_VirtualSystemExportSettingData"><PROPERTY NAME="Caption" TYPE="string"><VALUE>Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="CopySnapshotConfiguration" TYPE="uint8"><VALUE>0</VALUE></PROPERTY><PROPERTY NAME="CopyVmRuntimeInformation" TYPE="boolean"><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME="CopyVmStorage" TYPE="boolean"><VALUE>FALSE</VALUE></PROPERTY><PROPERTY NAME="CreateVmExportSubdirectory" TYPE="boolean"><VALUE>TRUE</VALUE></PROPERTY><PROPERTY NAME="Description" TYPE="string"><VALUE>Microsoft Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="ElementName" TYPE="string"><VALUE>Microsoft Virtual System Export Setting Data</VALUE></PROPERTY><PROPERTY NAME="InstanceID" TYPE="string"><VALUE>Microsoft:A1F914F2-F38E-48A6-B1EE-58B84ECEAC0C</VALUE></PROPERTY><PROPERTY NAME="SnapshotVirtualSystem" TYPE="string"></PROPERTY></INSTANCE>
</VALUE.OBJECT>
XML 之后
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<DECLARATIONS>
<DECLGROUP>
<VALUE.OBJECT>
<INSTANCE CLASSNAME="Msvm_VirtualSystemExportSettingData">
<PROPERTY NAME="Caption" TYPE="string">
<VALUE>Virtual System Export Setting Data</VALUE>
</PROPERTY>
<PROPERTY NAME="CopySnapshotConfiguration" TYPE="uint8">
<VALUE>0</VALUE>
</PROPERTY>
<PROPERTY NAME="CopyVmRuntimeInformation" TYPE="boolean">
<VALUE>FALSE</VALUE>
</PROPERTY>
<PROPERTY NAME="CopyVmStorage" TYPE="boolean">
<VALUE>TRUE</VALUE>
</PROPERTY>
<PROPERTY NAME="CreateVmExportSubdirectory" TYPE="boolean">
<VALUE>TRUE</VALUE>
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
<VALUE>Microsoft Virtual System Export Setting Data</VALUE>
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
<VALUE>Microsoft Virtual System Export Setting Data</VALUE>
</PROPERTY>
<PROPERTY NAME="InstanceID" TYPE="string">
<VALUE>Microsoft:A1F914F2-F38E-48A6-B1EE-58B84ECEAC0C</VALUE>
</PROPERTY>
<PROPERTY NAME="SnapshotVirtualSystem" TYPE="string">
</PROPERTY>
</INSTANCE>
</VALUE.OBJECT>
注意:这是来自的交叉帖子https://serverfault.com/questions/231186/code-to-update-hyperv-export-file https://serverfault.com/questions/231186/code-to-update-hyperv-export-file。我认为这实际上更多的是编码/开发问题,而不是 IT 专业人员的问题。