PowerShellからXML形式の設定ファイルの情報を読み込む

XML形式のファイルの設定情報をPowerShellからを取り出す必要があったので纏めてみました。



XMLファイル

サッカーチームをXMLファイルで表現してみました。
これを「member.xml」として保存とします。
それぞれのメンバーに名前と背番号とポジションを定義します。
TeamAとTeamBのmemberタグの書き方は変えてあります。

<?xml version="1.0"?>
<Configuration>
	<teamA>
		<member1>
			<name>Wakashimazu</name>
			<number>1</number>
			<position>GK</position>
		</member1>
		<member2>
			<name>Misaki</name>
			<number>11</number>
			<position>MF</position>
		</member2>
	</teamA>
	<teamB>
		<member No = "1">
			<name>Wakabayashi</name>
			<number>22</number>
			<position>GK</position>
		</member>
		<member No = "2">
			<name>Jito</name>
			<number>5</number>
			<position>DF</position>
		</member>
		<member No = "3">
			<name>Soda</name>
			<number>7</number>
			<position>DF</position>
		</member>
		<member No = "4">
			<name>Ozora</name>
			<number>10</number>
			<position>MF</position>
		</member>
	</teamB>
</Configuration>

PowerShellスクリプト

まずはXMLファイルを読み込みます。
例えばPowerShellスクリプトファイルと同じディレクトリにmember.xmlファイルを置いたとしたら
以下のようなスクリプトで読み込めます。

$scriptPath = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
$memberInfo = [xml](Get-Content "$scriptPath\member.xml")

この時点で$memberInfoにはSystem.Xml.XmlDocumentタイプのオブジェクトの形式で、
member.xmlの中身が入っています。


オブジェクトの中身の情報は簡単に取り出せます。
例えばこのようにXMLの構造を意識しやすい形で取り出せます。

Write-Host $memberInfo.Configuration.teamA.member2.name
Write-Host $memberInfo.Configuration.teamA.member2.number
Write-Host $memberInfo.Configuration.teamA.member2.position
【実行結果】
Misaki
11
MF


TeamBの方はmemberが配列になっているので、
このように取り出せます。

Write-Host $memberInfo.Configuration.teamB.member[1].name
Write-Host $memberInfo.Configuration.teamB.member[1].number
Write-Host $memberInfo.Configuration.teamB.member[1].position
【実行結果】
Jito
5
DF


配列なのでforeach文なんかと相性良いです。

foreach ($team in $memberInfo.Configuration.teamB) {
	foreach($member in $team.member){
		Write-Host "========"
		Write-Host "NAME    :" $member.name
		Write-Host "NUMBER  :" $member.number
		Write-Host "POSITION:" $member.position
	}
}
【実行結果】
========
NAME    : Wakabayashi
NUMBER  : 22
POSITION: GK
========
NAME    : Jito
NUMBER  : 5
POSITION: DF
========
NAME    : Soda
NUMBER  : 7
POSITION: DF
========
NAME    : Ozora
NUMBER  : 10
POSITION: MF