PowerShellでコマンドを実行した結果は「オブジェクト」になる。このため、コマンドの実行結果を利用しやすい。オブジェクトの利用で活躍するのがパイプライン(以下パイプ)である。

 IPアドレスを取得するコマンド「Get-NetIPAddress」で試してみよう。このコマンドをそのまま実行すると、ローカルコンピュータが持つすべての物理的、論理的なネットワークインタフェースのIPアドレス(IPv4およびIPv6)とその関連情報がずらっと表示される。その中から特定の情報を抽出したい場合にパイプが有効だ。

Get-NetIPAddress | Select-Object IPAddress

と実行してみよう。「|」がパイプだ。すると、IPアドレスだけが表示される(図1)。

図1●パイプを使って、指定したプロパティを表示
図1●パイプを使って、指定したプロパティを表示
「Get-NetIPAddress」コマンドの実行結果を、「Select-Object」コマンドに渡している。Select-Objectは受け取ったオブジェクトにおける、引数で指定されたプロパティ「IPAddress」を表示する。
[画像のクリックで拡大表示]

 パイプは前のコマンドの結果を後ろのコマンドに引き渡す際に使う。ここでは、Get-NetIPAddressの結果を、「Select-Object」に渡している。Select-Objectは受け取ったオブジェクトの中から必要なプロパティのみを抽出するコマンドだ。以下のように複数のプロパティも指定できる。

Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress

 条件に合うオブジェクトを取り出すこともできる。「Where-Object」コマンドを使う。

Get-NetIPAddress | Where-Object InterfaceAlias -like *ローカル*

とすると、出力結果から条件に合致するものを検索して抽出できる(図2)。さらにIPAddressのみを表示するなら、

Get-NetIPAddress | Where-Object InterfaceAlias -like *ローカル* | Select-Object IPAddress
図2●条件に合うオブジェクトを抽出する
図2●条件に合うオブジェクトを抽出する
「Where-Object」は条件に合うオブジェクトを取り出す。「InterfaceAlias -like *ローカル*」は、“「InterfaceAlias」が「ローカル」という文字列を含む”という意味になる。
[画像のクリックで拡大表示]

という具合に、複数のパイプを使用して連結すればよい。ある程度複雑な処理でも1行で記述できる。

図2●条件に合うオブジェクトを抽出する
図2●条件に合うオブジェクトを抽出する
「Where-Object」は条件に合うオブジェクトを取り出す。「InterfaceAlias -like *ローカル*」は、“「InterfaceAlias」が「ローカル」という文字列を含む”という意味になる。
[画像のクリックで拡大表示]
▼「|」がパイプだ
日本語キーボードなら、[Shift]キーを押しながら[\]キーを押すと入力できる。
▼プロパティのみを抽出する
プロパティを「列」だと考えれば、Select-ObjectはSQLのSELECTコマンドに相当する。