これまでPowershellのサンプルコードを見ていて、#や?の使い方がわからず悩んでいたが、%がForEach-Object、?がWhere-Objectであることを知って、今更ながらびっくり。まだまだ勉強不足です。。
まず、get-alias でエイリアスを確認
確かに、 %がForEach-Object、?がWhere-Objectにエイリアスされていることがわかる。
ちなみに、 where も Where-Object にエイリアスされるよう設定されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 |
確認用サンプルコード
上記を踏まえて、以下のサンプルコード、エイリアスを使っても使わなくても結果は同じ
1 2 3 4 5 6 7 8 9 10 11 12 |
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 } |
コメント