PowerShell %はForEach-Object、?はWhere-Object

PowerShell

 これまでPowershellのサンプルコードを見ていて、#や?の使い方がわからず悩んでいたが、%がForEach-Object、?がWhere-Objectであることを知って、今更ながらびっくり。まだまだ勉強不足です。。

まず、get-alias でエイリアスを確認

 確かに、 %がForEach-Object、?がWhere-Objectにエイリアスされていることがわかる。

ちなみに、 where も Where-Object にエイリアスされるよう設定されている。

PS C:\Users\papanda925\DeskTop\ps1> get-alias


CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content

・
・
・

Alias           wget -> Invoke-WebRequest
Alias           where -> Where-Object
Alias           wjb -> Wait-Job
Alias           write -> Write-Output

確認用サンプルコード

上記を踏まえて、以下のサンプルコード、エイリアスを使っても使わなくても結果は同じ

Write-Host "ForEach-Object を使った例"
(1..10) | ForEach-Object { sleep 1; (date).ToString() }

Write-Host "ForEach-Objectのエイリアス(%)を使った例"
(1..10) | % { sleep 1; (date).ToString() }


Write-Host "Where-Object を使った例"
Get-ChildItem | Where-Object { $_.PSIsContainer }

Write-Host "Where-Object のエイリアス(?)を使った例"
Get-ChildItem | ? { $_.PSIsContainer }
ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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