我有一個監視系統返回JSON數據。我使用Powershell來獲取所有受監控的服務器及其屬性的子集。然後我想將這些屬性導出爲與XSD匹配的XML文件,但我不知道如何執行此操作。匹配Powershell XML輸出到模式
當我運行
$allServers | get-member
我可以看到所有屬性用於在System.Management.Automation.PSCustomObject的服務器。所以,我跑:
$filtered = $allServers | Select-Object Id,HostName,Description,Status
好吧,現在我有我想要的屬性,我可以運行這樣的事情:
$filtered = ($filtered | ConvertTo-Xml)
,現在我有一個System.Xml.XmlDocument對象。超。我可以使用保存方法:
$filtered.Save("c:\test\test.xml")
輸出看起來不錯,但與所需的模式文件不匹配。
<?xml version="1.0" encoding="utf-8"?>
<Objects>
<Object Type="System.Management.Automation.PSCustomObject">
<Property Name="id" Type="System.Int32">6</Property>
<Property Name="hostname" Type="System.String">server1</Property>
<Property Name="description" Type="System.String">dc</Property>
<Property Name="status" Type="System.Int32">1</Property>
</Object>
</Objects>
我的模式是這樣的:
<?xml version="1.0" encoding="Windows-1252"?>
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xsd:element name="ServerImport">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Servers">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Server">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Id" type="xsd:int" />
<xsd:element name="HostName" type="xsd:string" />
<xsd:element name="Description" type="xsd:string" />
<xsd:element name="Status" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xs:schema>
那麼,如何讓我的輸出相匹配的模式?
謝謝。
好像您需要將Select-Object的輸出轉換爲定義的類。你使用的是什麼版本的Powershell? – Forty3
我認爲目前運行我的任務的服務器有4個,但是我可以安裝5. – StackExchangeGuy
如果你能找到一個v5環境,你可以嘗試將輸出轉換成一個類,然後把它寫入XML。純粹的理論,因爲我還沒有安裝v5。 – Forty3