本日のお題は「パイプライン処理」です。
パイプライン処理とは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つにまとめられるということは、それだけ可読性や保守性も高められそうですよね。
ぜひ活用して今まで回りくどく処理を書いていたコードを簡潔にまとめてキレイなコーディングにしてみましょう!
コメント