業務改善!Windows PowerShell入門

Windows PowerShellで、とにかく楽をしたい!実際に仕事で楽になった事、便利になった事を紹介しつつ進めていきます。

PowerShell XMLファイルにアクセスしろ!

 

スクリプトを作っていると、入力用データをどうしても外部ファイルから読み込まねばならぬシーンがある。

また、それとは別に、外部ファイルに設定用データを書き込んでおいて、それを読み込んだ方が便利、或いは保守性が高いという場合もある。

 

では、PowerShellスクリプトにおいて、便利な読み込み用ファイルとは何か。
俺がよく使うのは以下の3種類である。

 

1.メモ帳(*.txt)
2.CSVファイル(*.csv)
3.XMLファイル(*.xml)

 

このうち今回はXMLファイルについて書きたいと思う。
どうして、書こうと思ったか?

 

アクセスが楽すぎるゼ!

 

これに尽きる。
楽ということはつまり、扱いが便利、開発効率が高いということになるだろう。

 

どうやってアクセスするんや!

PowerShellからXML文字列にアクセスするのは、スゲぇ簡単だ。

System.XML.XMLDocumentクラスのデータ型にキャストして、アクセスするだけ。

マジでこんだけ。あとはXMLの各要素を参照したり、追加したりするだけだ。

 

▼今回のお題で使うサンプルXML

config.xml

f:id:acoustic_groove:20171126225150p:plain

 

XMLの実態はテキストファイルだ。よって、通常の*.txtファイルと同様にGet-Contentコマンドレットで読み込み、[XML]データ型にキャストする。


では、特定の要素のみを参照する場合と、すべての要素を参照する例を示してみたい。

#XMLファイルの読み込みとキャスト
[XML]$xml = Get-Content "C:¥config.xml"

#型の確認
Write-Host "▼型の確認"
$xml.GetType()
Write-Host ""

#name要素の要素番号2のデータを表示
Write-Host "▼name要素の要素番号2のデータ"
$xml.root.data.name[2]
Write-Host ""

#すべての要素を表示
Write-Host "▼すべてのデータ"
ForEach($str in $xml.root.data){
    Write-Host "---------------------"
    Write-Host ("名前:" + $str.name)
    Write-Host ("出身:" + $str.from)
    Write-Host ("職業:" + $str.job)
}
Write-Host "" Read-Host "×ボタンで終了"

 f:id:acoustic_groove:20171126230631p:plain

 

 

・検証のため、型確認をした。

期待通り、System.XML.XMLDocumentクラスのデータ型であることが分かる。
添え字指定により、特定の要素を参照することができる。1番目の要素番号は0となるので、今回の例の要素番号は2となる。
ForEachステートメントを使用すると、すべての要素にアクセスすることができる。

 
かくも簡単にアクセスすることができた。

 

PowerShell、イエーイ!