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