Я использую модуль HyperV из Codeplex для экспорта «только для конфигурации» с сервера Hyper-V 2008R2.Чтобы импортировать конфигурацию на другой сервер HyperV, мне нужно отредактировать значение CopyVMStorage в файле EXP.Этот файл является файлом XML.Я написал следующий код в PowerShell, чтобы сделать обновление для меня.Переменная $ существующие - это существующий файл 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, я получаю сообщение об ошибке «неверный формат файла».Мне интересно, если кодировка файла неверна или происходит что-то еще.Если я редактирую файл вручную в WordPad, он импортирует без проблем.
Я заметил, что файл, который обновляется с помощью 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. Я считаю, что это скорее проблема кодирования / разработки, нежели вопрос ИТ-специалиста.