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

PowerShellカテゴリを表すパンダのイラスト 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 }

文書情報

記事タイトル
PowerShell %はForEach-Object、?はWhere-Object
作成日
更新日
Source URL
https://papanda925.com/?p=1746

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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