パイプラインとは?
PowerShell Core を使用する上で、パイプラインは欠かせない機能の1つです。パイプライン(以下パイプ)は「|」であらわし、コマンドの実行結果を次のコマンドの入力へと引き渡します。
Get-Member コマンドレットを使用しながら、パイプの機能を見てみましょう。
Get-Member コマンドレットは、オブジェクトが持つメンバー情報(プロパティやメソッド)一覧を取得する機能を持ちます。
例えば、以下のコマンドを実行すると Get-Date 実行時に取得できるオブジェクト情報がパイプを介して Get-Memberに渡されて、Get-Date がメンバーの一覧を取得することができます。
Get-Date | Get-Member
実行結果例を以下に示します。
パイプのイメージを以下に示します。
Get-Date の実行結果(つまり Get-Date のオブジェクト)は、パイプを通って Get-Member へ渡されます。Get-Member はパイプから受け取ったオブジェクトのメンバー一覧を表示する機能を持っていますので、上図のような結果一覧が表示されます。
MacOS や Linux系 OS とは異なり、パイプはオブジェクトを通します。これにより、パイプの先では、受け取ったオブジェクトをさらに加工することもできます。
また、パイプはいくつでも使用することができます。
Select-Object で必要情報のみを抜き出す
Select-Object を使用すると、必要なオブジェクトのみを取り出すことができます。
例えば、Get-Date を実行して、年だけを取得したい場合は以下のようにします。
Get-Date | Select-Object Year
実際に実行すると以下のように結果が返されます。
Select-Object は、カンマで区切ることで複数のオブジェクトを取得することもできます。
例えば、Get-Date の結果から、年、月、日を取得したい場合は以下のようにします。
Get-Date | Select-Object Year, Month, Day
実際に実行すると以下のように結果が返されます。
Sort-Object でデータを並び替える
Sort-Object を使用すると、取得したオブジェクトを昇順や降順で並べ替えて出力することができます。
例えば、ログファイルを更新日付が新しい順にしたり、ファイル名を昇順で表示したりと様々な並べ替えで使用することが出来ます。
以下は、パス C:¥Work 配下にあるファイルやフォルダを、更新日時(LastWriteTime)順に並べ替えて表示をするコマンドです。
Get-ChildItem -path C:¥Work | Sort-Object LastWriteTime
実行例を以下に示します。
昇順や降順での並べ替え
昇順で並べ替えたい場合は -Ascending 、降順で並べ替えたい場合は -Descending パラメータを付けます。
何も指定しない場合は、-Ascending となります。
先ほどのコマンドを降順で出力したい場合は、以下のようにします。
Get-ChildItem -path C:¥Work | Sort-Object LastWriteTime -Descending
実行例を以下に示します。
Where-Object で指定した条件に合致するオブジェクトを取得する
Where-Object を使用すると、指定した条件に合致するオブジェクトのみを取得することができます。
例えば、指定した日付以降に更新されたファイルのみを抽出したり、CPUの使用率が 50% を超えるプロセスのみを取得したりといったことができます。
以下は、更新日が 2019/11/25 以降のファイルのみを抽出する例です。
Get-ChildItem -path C:¥Work | Where-Object {$_.LastWriteTime -gt "2019/11/25"}
「$_」はパイプから受け取ったオブジェクトを表しています。また「-gt」は PowerShell Core の演算子で「>=(以上)」を表します。
以下に実行例を示します。
パイプを複数使用した例
最後に、パイプを複数使用する例を示します。
先ほどの、Where-Object では「2019/11/15」以降のファイルを取得しました。これらのファイルを削除したい場合は、以下のようにします。
Get-ChildItem -path C:¥Work | Where-Object {$_.LastWriteTime -gt "2019/11/25"} | Remove-Item
実行例を以下に示します。
まとめ
今回は、パイプの基本的な使用方法と、Get-Member, Select-Object, Sort-Object, Where-Object のコマンドレットの使用方法などについて学びました。
パイプを使用することで、他のコマンドレットへオブジェクトを渡すことができますので、是非覚えておきましょう。また、コマンドレットによってはパイプからのオブジェクトを受け取ることができないものも存在ます。使用する際は、ぜひヘルプを活用してください。
コメント
[…] パイプラインの使用方法 | PowerShell from Japan!! Blog […]