※この記事は「2021年5月21日」に更新しました。
PowerShell(パワーシェル)講座です。
前回は、CSVデータ入出力について紹介しました。
第6回目は、オブジェクト操作についてです。
環境は、Windows 10(64bit)、PowerShell 6.1.2 です。
パイプを上手く活用する【オブジェクト】
PowerShell(パワーシェル)は、オブジェクトをパイプできるという特徴があります。
上手く活用すれば、スクリプトの記述量が削減できます。
せっかくなので練習しましょう。
ForEach-Object について【PowerShellコマンドレット】
ForEach-Object は個々のオブジェクトに対して任意の処理を行うことができるコマンドレットです。
例えば、下記のような配列を生成します。
$a = 1, 2, 3, 4, 5
そして、パイプを活用して ForEach-Object に渡します。
$a | ForEach-Object {2 * $_ + 5}
ちなみに $_ というのは自動変数で ForEach によって取り出された各々の値が格納されます。
結果は下記の通りになります。
7 9 11 13 15
Where-Object について【PowerShellコマンドレット】
Where-Object は指定した条件を満たすデータを抽出するときに使います。
今回もパイプを使っていきます。
Get-Variable | Where-Object Name -like W*
Get-Variable は、現在定義されている変数一覧を確認できるコマンドレットです。
その結果をパイプを使って、Where-Object で絞り込みをします。
今回は Name が W で始まる項目を抽出しています。
ちなみにこんな感じにも書けます。
Get-Variable | Where-Object { $_.Name -like "W*" }
同じ結果が確認できるかと思います。
中括弧で囲んでいるのはスクリプトブロックと呼ばれるものです。
Select-Object について【PowerShellコマンドレット】
Select-Object は指定したプロパティを取り出すときに使います。
例えば、先程の結果で Value の項目が不要ということであれば。
Get-Variable | Where-Object Name -like W* | Select-Object Name
とすれば良いわけです。
データを書き換える【オブジェクト操作】
今までのコマンドレットを利用してデータを書き換えしてみます。
まずは、カスタムオブジェクトをつくります。
$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 に書き換えられます。
抽出結果が複数となり、複数書き換える場合は下記が参考になります。
$a | Where-Object { $_.name -match "pasota" } | ForEach-Object {$_.age=20}
今回の例だと抽出結果は 1行だけですけど、複数行になった場合でも ForEach-Object で1行ずつ処理してくれます。
最後に
いかがでしょうか。
今回は、オブジェクト操作について、解説しました。
次回は、ファイル入出力について、解説します。
パイプ処理とオブジェクト操作にまだ慣れた感じがしないのですが、コツコツやっていきます。