パイプライン

パイプライン記号「|」を使って、複数のコマンドを連携させることができます

パイプラインの構文

パイプライン要素1[ | パイプライン要素2][ | パイプライン要素3]
# []の部分は省略可能

この構文を見ていただければわかる通り、実はコマンドレット1つだけでもパイプラインです。

Example

具体的には、以下のようにコマンドレットとパイプライン記号「|」を組み合わせて記述します。

Get-Process | Select-Object Name

ForEach-Object

パイプラインの逐次処理には、ForEach-Objectを使用します。

ForEach-Objectのエイリアス

ForEach-Objectには、以下のエイリアスがあります。

foreach
%

Example

# 1から3までの値を、それぞれ2倍にして出力する
PS> 1..3 | ForEach-Object {$_ * 2}
PS> 2
PS> 4
PS> 6

自動変数の$_と$PSItem

$_は、パイプラインで扱っている現在の値を示す自動変数です。
$_と同じ意味で、$PSItemというものもあります。

3つのフェーズ

パイプラインの逐次処理には、Begin、Process、Endの3つのフェーズがあります。

# 1から3までの値の、総和を出力する
PS> 1..3 | % {$sum=0} {$sum+=$_} {$sum}
PS> 6

総和をただ出力しただけでは、さきほど話した3つのフェーズについてわからないので、
各フェーズがわかるように書き換えていきます。

# 1から3までの値の、総和を出力する
PS> 1..3 | % {$sum=0;"Begin $sum $_”} {$sum+=$_;"Process $sum $_"} {"End $sum $_"}
PS> Begin 0 
PS> Process 1 1
PS> Process 3 2
PS> Process 6 3
PS> End 6 

ForEach-Objectでの省略した書き方

Example 1

PS> Get-Process | ForEach-Object {$_.ProcessName}

↓省略した書き方

PS> Get-Process | ForEach-Object ProcessName

Example 2

PS> String' | ForEach-Object {$_.ToUpper()}

↓省略した書き方

PS> String' | ForEach-Object ToUpper
STRING
PS> ‘String' | ForEach-Object ToLower
string

Where-Object

オブジェクトをFilterするには、Where-Objectを使用します。

Where-Objectのエイリアス

Where-Objectには2つのエイリアスがあります。

where
?

Where-Objectでの省略した書き方

Get-Process | where {$_.Name -like "*chrome"}

↓省略した書き方

Get-Process | where Name -like "*chrome"

Select-Object

パイプラインでオブジェクトを選択するには、Select-Objectを使用します。

PS> 1..10 | Select-Object -First 3
1
2
3
PS> 1..10 | Select-Object -Last 3
8
9
10

Sort-Object

パイプラインでオブジェクトを整列させるには、Sort-Objectを使用します。

PS> 1..10 | Sort-Object -Descending | Select-Object -First 3
10
9
8
PS> 1..10 | Sort-Object -Descending | Select-Object -Last 3
3
2
1

Measure-Object

オブジェクトの集計には、Measure-Objectが便利です。

PS> 1..10 | Measure-Object -Sum

Count             : 10
Average           : 
Sum               : 55
Maximum           : 
Minimum           : 
StandardDeviation : 
Property          : 

すべての結果を得るには、AllStatsパラメーターを指定します。

PS> 1..10 | Measure-Object -AllStats 

Count             : 10
Average           : 5.5
Sum               : 55
Maximum           : 10
Minimum           : 1
StandardDeviation : 3.02765035409749
Property  

YouTube

動画による説明はこちら。


スポンサーリンク