#7 パイプライン処理で業務効率アップ

PowerShellのパイプライン処理を表した画像 PowerShell

本日のお題は「パイプライン処理」です。
パイプライン処理とはGet-ChildItemやImport-Csvのようなコマンドレットを次のコマンドレットの入力として渡す処理の流れのことです。

例えば、Get-ChildItemで取得した複数のファイルがあるとします。
そこで「txtファイルだけを取得したい!」といったことがあると思います。
そこでパイプラインの「Where-Object」を使うことでフィルターを掛けるように、txtのみを取得することができるのです。
コードの書き方もパイプのように“|”を挟んで処理を書くのでわかりやすいですね。
“|”が書かれていれば最初のコマンドレットをフィルターを掛けたり、必要な個所だけを取得しようとしてるんだなぁと読み取れるかと思います。
パイプライン処理は以下の様なものがあります。

処理段階コマンドレット役割
取得Get-ChildItemファイルやデータを取得
絞り込みWhere-Object条件でフィルタリング
抜き出しSelect-Object必要な情報だけ抽出
並び替えSort-Object順序を整える
繰り返し処理ForEach-Object各アイテムに処理を実行

お気づきの方もいらっしゃるかもしれませんが、なんとパイプラインは1つだけでなく、複数の処理をすることができます。
つまり上記のテーブルに書いた処理は1回1回分けないで1行の処理で完結します。

# 以下はパイプラインを使用した例です。

# Get-ChildItemで"C:\Log"フォルダの".log"ファイルを取得していて、
Get-ChildItem -Path "C:\Logs" -Recurse -Filter *.log |
# Where-Objectでファイルの大きさが1MB以上のもの、
Where-Object { $_.Length -gt 1MB } |
# Select-Objectでファイル名とサイズだけ表示にし、
Select-Object Name, Length |
# Sort-Objectでサイズ順に並び替えています
Sort-Object Length -Descending

これだけの処理を1つにまとめられるということは、それだけ可読性や保守性も高められそうですよね。
ぜひ活用して今まで回りくどく処理を書いていたコードを簡潔にまとめてキレイなコーディングにしてみましょう!

コメント

タイトルとURLをコピーしました