【PowerShell講座】オブジェクト操作について

ビジネス

PowerShell講座です。

前回は、CSVデータ入出力について紹介しました。

【PowerShell講座】CSVデータ入出力について

2019.02.06

第6回目は、オブジェクト操作についてです。



パイプを上手く活用する

PowerShell は、オブジェクトをパイプできるという特徴があります。

上手く活用すれば、スクリプトの記述量が削減できます。

せっかくなので練習しましょう。

ForEach-Objectについて

ForEach-Object は個々のオブジェクトに対して任意の処理を行うことができるコマンドレットです。

例えば、下記のような配列を生成します。

$a = 1, 2, 3, 4, 5

そして、パイプを活用して ForEach-Object に渡します。

$a | ForEach-Object {2 * $_ + 5}

ちなみに $_ というのは自動変数で ForEach によって取り出された各々の値が格納されます。

結果は下記の通りになります。

7
9
11
13
15

Where-Object について

Where-Object は指定した条件を満たすデータを抽出するときに使います。

今回もパイプを使っていきます。

Get-Variable | Where-Object Name -like W*

Get-Variable は、現在定義されている変数一覧を確認できるコマンドレットです。

その結果をパイプを使って、Where-Object で絞り込みをします。

PowerShell

今回は Name が W で始まる項目を抽出しています。

ちなみにこんな感じにも書けます。

Get-Variable | Where-Object { $_.Name -like "W*" }

同じ結果が確認できるかと思います。

中括弧({})で囲んでいるのはスクリプトブロックと呼ばれるものです。

Select-Object について

Select-Object は指定したプロパティを取り出すときに使います。

例えば、先程の結果で Value の項目が不要ということであれば。

Get-Variable | Where-Object Name -like W* | Select-Object Name

とすれば良いわけです。

PowerShell

データを書き換える

今までのコマンドレットを利用してデータを書き換えしてみます。

まずはカスタムオブジェクトをつくります。

$a = [PSCustomObject]@{name = "pasota"; age = 36},
[PSCustomObject]@{name = "admin"; age = 22},
[PSCustomObject]@{name = "john"; age = 26}

続いて、下記を実行します。

$( $a | Where-Object { $_.name -match "pasota" } ).age = 20

そうすると、pasota の age の値が 20 に書き換えられます。

PowerShell

抽出結果が複数となり、複数書き換える場合は下記が参考になります。

$a | Where-Object { $_.name -match "pasota" } | ForEach-Object {$_.age=20}

今回の例だと抽出結果は1行だけですけど、複数行になった場合でも ForEach-Object で1行ずつ処理してくれます。

最後に

いかがでしょうか。

パイプ処理とオブジェクト操作にまだ慣れた感じがしないのですが。

コツコツやっていきます。