【PowerShell】パイプラインとは

※この記事は「2023年4月14日」に更新しました。

PowerShell(パワーシェル)のパイプラインについて。

PowerShell の変数は、オブジェクトとして扱われます。

パイプ処理(パイプライン)についても同様で、オブジェクトを受け渡しすることになります。

環境は、Windows 10(64bit)、PowerShell 5.11 です。

タカフミ
記事を書いている管理人の経歴は、以下の通りです。
  • 基本情報技術者資格所有者(ソフト開発の国家資格)
  • WordPress歴、10年以上
  • パソコン販売歴、約5年

パイプラインとは

パイプラインとは、複数のコマンドレットで実行結果を受け渡すときに使うものです。

例えば、3つのコマンドレットをパイプ処理でつなげるには、以下のように書きます。

コマンドレット1 | コマンドレット2 | コマンドレット3

パイプラインは、別に PowerShell だけが使えるわけではありません。

コマンドプロンプトでも、使うことができます。

タカフミ
コマンドプロンプトと PowerShell では、パイプラインの挙動が異なります。

コマンドプロンプトの場合、受け取った入力は StdIn(標準入力)に送り、無事処理が実行されれば StdOut(標準出力)に出力されます。

もし、エラーが発生した場合は、StdErr(標準エラー)に出力されます。

コマンドプロンプトの場合、StdOut と StdIn をつなぐのが、パイプラインでした。

しかし、PowerShell の場合、このような動きはしません。

PowerShell は、出力をオブジェクトとして、パイプラインに送ります。

オブジェクトの入力に関しては、どのパラメータにつなげれば良いか判断する必要があります。

実際に慣れる必要がありますが、使いこなすと PowerShell のパイプラインは非常に強力です。

他のシェルと決定的に違うところなのでガンガン使っていきましょう。



パイプラインの例

それでは、実際にパイプラインを使った例を紹介していきます。

Select-Object を使った例

Select-Object は、パイプラインで受け取ったオブジェクトから必要なデータを抽出するコマンドレットです。

Get-Variable | Select-Object Name

Get-Variable は、現在定義されている変数一覧を確認できるコマンドレットです。

この実行結果に対して、パイプラインを使って、Select-Object でデータを抽出します。

Name という項目だけ表示させます。

実行結果は、以下の通りです。

Select-Object を使った例

長すぎるので途中で画像は切っていますが、まだ下に続いています。

Where-Object を使った例

Where-Object は、パイプラインで受け取ったオブジェクトから指定した条件を満たすデータを抽出するコマンドレットです。

Get-Variable | Where-Object Name -like O*

先程と同じく Get-Variable を使っていきます。

Where-Object の条件は、Name で O から始まるデータだけ抽出しています。

ちなみに、下記のように表現することもできます。

Get-Variable | Where-Object { $_.Name -like "O*" }

$_ というのは自動変数で、中括弧で囲まれているのはスクリプトブロックと呼ばれるものです。

実行結果は、以下の通りです。

Where-Object を使った例

ForEach-Object を使った例

ForEach-Object は、個々のオブジェクトに対して任意の処理を行うことができるコマンドレットです。

簡単にどんなことができるか紹介します。

適当に、以下のような配列をつくります。

$a = 1, 2, 3

パイプラインを使って、この配列を ForEach-Object に渡してみましょう。

$a | ForEach-Object {2 * $_ + 1}

実行結果は、以下の通りです。

ForEach-Object を使った例

最後に

今回は、PowerShell(パワーシェル)のパイプラインについて、解説しました。

オブジェクトをパイプラインで受け渡すことに慣れていけば、今までバッチ(スクリプト)を作成していたのが、コマンドだけで解決することもあります。

とにかく慣れていきましょう。