about_Simplified_Syntax
簡単な説明
オブジェクトのコレクションのフィルターをスクリプト化する、より簡単で自然な言語の方法について説明します。
詳細な説明
Windows PowerShell 3.0 で導入された簡略化された構文を使用すると、スクリプト ブロックを使用せずにいくつかのフィルター コマンドを作成できます。 簡略化された構文は自然言語によく似ていますが、主にコマンド Where-Object
とそれに ForEach-Object
対応するエイリアス where
にパイプされるオブジェクトのコレクションで foreach
便利です。
スクリプト ブロック内の自動変数 $_
を参照せずに、コレクションのメンバー (最も一般的には配列) に対してメソッドを使用できます。
次の 2 つの呼び出しについて考えてみましょう。
標準構文
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -FilterScript { $_.FriendlyName -eq 'Verisign' }
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -FilterScript { $_.GetKeyAlgorithm() }
Note
2 番目のコマンドでは、コレクション内の GetKeyAlgorithm
各オブジェクトに対してメソッドが呼び出されます。 パイプラインから受け取ったオブジェクトにメソッドがない GetKeyAlgorithm
場合、コマンドはエラーを生成します。
簡略化された構文
簡略化された構文では、コレクション内のオブジェクトのメンバーに対して動作する比較演算子がパラメーターとして実装されます。 また、スクリプト ブロック内の自動変数 $_
を参照せずに、コレクション内のオブジェクトに対してメソッドを呼び出すこともできます。 次の 2 つの呼び出しを標準構文の例と比較します。
Get-ChildItem Cert:\LocalMachine\Root |
Where-Object -Property FriendlyName -EQ 'Verisign'
Get-ChildItem Cert:\ -Recurse |
ForEach-Object -MemberName GetKeyAlgorithm
Property パラメーターと MemberName パラメーターは位置指定であるため、コマンドから省略できます。 エイリアスを使用すると、コマンドをさらに簡略化できます。
dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm
どちらの構文も機能しますが、簡略化された構文はスクリプト ブロック内の自動変数 $_
を参照せずに結果を返します。 簡略化された構文は、自然言語ステートメントのように読み取られ、理解しやすくなります。
メソッド名GetKeyAlgorithm
は、MemberName パラメーターForEach-Object
の引数として渡されます。 簡略化された構文を使用してメソッドを呼び出すと、そのオブジェクトにそのメソッドがある場合にのみ、パイプライン内の各オブジェクトに対してメソッドが呼び出されます。 そのため、同じ結果が得られますが、エラーは発生しません。
次の例では、 Description
MemberName パラメーターForEach-Object
に渡されます。 このコマンドは、... によって返される各 System.Diagnostics.Process オブジェクトの説明を Get-Process
表示します。
Get-Process | foreach Description
この例では、メソッド名 GetFiles
がコマンドの MemberName パラメーターに ForEach-Object
渡されます。 値は .*
ArgumentList パラメーターに渡されます。 メソッドはGetFiles()
、によって返される各 System.IO.DirectoryInfo オブジェクトの検索パターン パラメーター.*
を使用してGet-ChildItem
呼び出されます。
Get-ChildItem /home -Directory | foreach GetFiles .*
関連項目
PowerShell
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示