about_Simplified_Syntax

簡単な説明

オブジェクトのコレクションに対するスクリプトフィルターの、より簡単で自然言語の方法について説明します。

長い説明

Windows PowerShell 3.0 で導入された簡略化された構文を使用すると、スクリプトブロックを使用せずにいくつかのフィルターコマンドを作成できます。 簡略化された構文は自然言語に似ています。これは主に、コマンド Where-ObjectForEach-Object 、それに対応するエイリアス where および foreach にパイプされるオブジェクトのコレクションに役立ちます。

スクリプトブロック内の自動変数 $_ を参照せずに、コレクションのメンバー (通常は配列) に対してメソッドを使用できます。

次の2つの呼び出しについて考えてみます。

標準構文

dir Cert:\LocalMachine\Root | where { $_.FriendlyName -eq 'Verisign' }
dir Cert:\ -Recurse | foreach { $_.GetKeyAlgorithm() }

簡略化された構文

簡略化された構文では、コレクション内のオブジェクトのメンバーに対して機能する比較演算子は、パラメーターとして扱われます。 スクリプトブロック内の自動変数 $_ を参照せずに、コレクション内のオブジェクトに対してメソッドを呼び出すことができます。 次の2つの呼び出しを、前の例の呼び出しと比較します。

dir Cert:\LocalMachine\Root | where FriendlyName -eq 'Verisign'
dir Cert:\ -Recurse | foreach GetKeyAlgorithm

どちらの構文も機能しますが、簡略化された構文は、スクリプトブロック内の自動変数 $_ を参照せずに結果を返します。 メソッド名 GetKeyAlgorithm は、の ForEach-Object パラメーターとして扱われます。 2番目のコマンドは、指定された引数が適用されなかった項目の結果を返さないようにするため、エラーが発生することなく、同じ結果を返します。

この例では、 Process プロパティ Description がメンバー名パラメーターとしてコマンドに ForEach-Object 渡されます。 結果として、アクティブなプロセスの説明が表示されます。

Get-Process | foreach Description

この例 DirectoryInfo では、メソッド GetFiles はコマンドの ForEach-Object メンバー名パラメーターとして渡されます。
メソッドは、検索パターンパラメーター .* を使用して呼び出されます。
結果 FileInfo は、ユーザーのホームディレクトリにあるすべての Unix スタイルの隠しファイルのレコードになります。

Get-ChildItem /home -Directory | foreach GetFiles .*

関連項目