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로 업데이트 된 파일은 서식이 지정된 반면 원시 파일은 모두 공백없이 함께 묶여있는 것으로 나타났습니다.
이 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 질문보다는 코딩/개발 문제에 더 가깝다고 생각한다.
글쎄, 나는 그것이 실제로 파일의 XML과 같은 _looks_ 만이 아닌 가능성이 있습니다 가정 (즉, 하이퍼이 차이를 만들 안된다 형식에 의해 방해된다.) 우리는 전후, XML을 볼 수 있을까요? 바이너리 편집기에서 파일을 살펴보고, PowerShell이 유니 코드 BOM을 추가하지 않았는지 확인하거나, 혼란스러운 부분이 있는지 확인하십시오. –
전체 XML 파일입니까? 그것들 모두 잘 구성된 XML이 아니기 때문에; 그들은'DECLGROUP'과'DECLARATIONS' 엘리먼트의 닫는 태그가 없습니다 ... –
그들은 전체 파일이 아닙니다. 그것은 내가 바뀌고있는 태그의 끝에 이르는 파일의 시작입니다. 파일은 실제로 상당히 큽니다. 나는 거기에 복사 한 텍스트의 양을 최소화하고 싶었다. –