PowerShell を使用して XML ファイルを解析する
Extensible Markup Language または XML 形式は、今日でも広く使用されています。 構成ファイル、RSS フィード、および Office ファイルは、XML 形式を使用するほんの一例です。
Windows PowerShell を使用して XML ファイルを解析することは、PowerShell の旅の重要なステップです。 この記事では、Windows PowerShell を使用して XML ファイルを解析する方法について説明します。
PowerShell XML 要素の解析
まず、PowerShell を使用して Select-XML
で XML を解析する最も一般的で簡単な方法の 1つを取り上げましょう。 Select-Xml
PowerShell コマンドを使用すると、XML ファイルまたは文字列と XPath
フィルターを指定して特定の情報を引き出すことができます。
PowerShell で解析したい多くの PC に XML ファイルがあります。 たとえば、各マシンには名前、IP アドレス、およびレポートで使用できる Include
要素があります。
XML の例:
<Computers>
<Computer>
<Name>WINPC-01</Name>
<Ip>127.0.0.1</Ip>
<Include>true</Include>
</Computer>
<Computer>
<Name>WINPC-02</Name>
<Ip>192.168.1.105</Ip>
<Include>false</Include>
</Computer>
<Computer>
<Name>WINPC-03</Name>
<Ip>192.168.1.104</Ip>
<Include>true</Include>
</Computer>
</Computers>
PowerShell を使用してこの XML ファイルを解析し、コンピューター名を取得します。 これを行うには、Select-XML
コマンドを使用できます。
たとえば、上記のファイルでは、コンピューター名は Name
要素の内部テキスト (InnerXML
) に表示されます。
最初に適切な XPath
を提供して、コンピューター名を見つけます。 Computer
要素に含まれる Name
ノードのみが、この XPath
手法を使用して返されます。
次に、ForEach-Object
ループを使用して、各 Name
要素の Node.InnerXML
プロパティに到達し、その要素の InnerXML
のみを取得します。
コード例:
Select-Xml -Path C:\PS\sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }
PowerShell XML 属性を解析する
次に、コンピューター名を見つけるための新しいアプローチを取りましょう。 コンピュータ記述子は、XML 要素で表現されるのではなく、XML 属性で直接表現されます。
以下は、属性で表されたコンピューター記述子を含む XML ファイルの例です。 各記述子を要素ではなく属性として見ることができます。
コード例:
<Computers>
<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>
各記述子は属性であるため、Computer
要素を見つけるためだけに XPath
を微調整します。 次に、ForEach-Object
コマンドレットを使用して、name
属性の値を見つけます。
コード例:
Select-Xml -Path C:\Work\computers-attr.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }
出力:
WINPC-01
WINPC-02
WINPC-03
要素を読み取るか属性を読み取るかにかかわらず、Select-Xml
の構文は面倒です。XPath
パラメータを使用し、結果をループにパイプして、最後に Node
プロパティの下でデータを探す必要があります。 .
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn