[PowerShell Core 入門] パイプラインの使用方法

PowerShell Core PowerShell Core
PowerShell Core

パイプラインとは?

パイプライン

PowerShell Core を使用する上で、パイプラインは欠かせない機能の1つです。パイプライン(以下パイプ)は「|」であらわし、コマンドの実行結果を次のコマンドの入力へと引き渡します。

Get-Member コマンドレットを使用しながら、パイプの機能を見てみましょう。

Get-Member コマンドレットは、オブジェクトが持つメンバー情報(プロパティやメソッド)一覧を取得する機能を持ちます。

例えば、以下のコマンドを実行すると Get-Date 実行時に取得できるオブジェクト情報がパイプを介して Get-Memberに渡されて、Get-Date がメンバーの一覧を取得することができます。

Get-Date | Get-Member

実行結果例を以下に示します。

パイプの使用例

パイプの使用例

Get-Date は日付に関する情報を取得できるコマンドレットです。

 

パイプのイメージを以下に示します。

Get-Date の実行結果(つまり Get-Date のオブジェクト)は、パイプを通って Get-Member へ渡されます。Get-Member はパイプから受け取ったオブジェクトのメンバー一覧を表示する機能を持っていますので、上図のような結果一覧が表示されます。

パイプのイメージ

パイプのイメージ

MacOS や Linux系 OS とは異なり、パイプはオブジェクトを通します。これにより、パイプの先では、受け取ったオブジェクトをさらに加工することもできます。

また、パイプはいくつでも使用することができます。

Get-Member には -MemberType というパラメータがあります。
たとえば「Get-Member -MemberType Property」とするとプロパティのみを一覧表示させることができ、「Get-Member -MemberType Method」とするとメソッドのみを一覧表示することができます。

Select-Object で必要情報のみを抜き出す

Select-Object を使用すると、必要なオブジェクトのみを取り出すことができます。

例えば、Get-Date を実行して、年だけを取得したい場合は以下のようにします。

Get-Date | Select-Object Year

実際に実行すると以下のように結果が返されます。

Select-Object の使用例

Select-Object の使用例

 

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

実行例を以下に示します。

Sort-Object の使用例

Sort-Object の使用例

Get-ChildItem は、Linux 系 OS の「ls」、コマンドプロンプトの「dir」に相当するコマンドレットです。

昇順や降順での並べ替え

昇順で並べ替えたい場合は -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 は「?」と同等です。「? {$_.LastWriteTime -gt “2019/11/25”}」と書くこともできます。

パイプを複数使用した例

最後に、パイプを複数使用する例を示します。

先ほどの、Where-Object では「2019/11/15」以降のファイルを取得しました。これらのファイルを削除したい場合は、以下のようにします。

Get-ChildItem -path C:¥Work | Where-Object {$_.LastWriteTime -gt "2019/11/25"} | Remove-Item
Remove-Item は、指定されたオブジェクトを削除するというコマンドレットです。

実行例を以下に示します。

パイプを複数使用した例

パイプを複数使用した例

まとめ

今回は、パイプの基本的な使用方法と、Get-Member, Select-Object, Sort-Object, Where-Object のコマンドレットの使用方法などについて学びました。

パイプを使用することで、他のコマンドレットへオブジェクトを渡すことができますので、是非覚えておきましょう。また、コマンドレットによってはパイプからのオブジェクトを受け取ることができないものも存在ます。使用する際は、ぜひヘルプを活用してください。

コメント

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