これまで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 }

コメント