我使用Codeplex的HyperV模塊從2008R2 Hyper-V服務器執行「僅配置」導出。爲了在另一個HyperV服務器上導入配置,我需要在EXP文件中編輯CopyVMStorage的值。這個文件是一個XML文件。我在PowerShell中編寫了以下代碼來爲我執行更新。變量$ existing是現有的exp文件。使用PowerShell和「文件格式」錯誤編輯XML
$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中的此更改並能夠使用它來導入VM配置?
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跨崗位。我相信這實際上更多是編碼/開發問題,而不是IT Pro問題。
嗯,我想這可能是文件_looks_如XML,但實際上不是(即Hyper-V的被格式化,不應該有所作爲了。)我們可以看到XML,前後?你可以看看二進制編輯器中的文件,確保PowerShell不添加Unicode BOM或其他任何可能會令人困惑的東西嗎? – 2011-02-16 16:59:26