次の方法で共有


about_Parameter_Binding

簡単な説明

パラメーター バインドは、PowerShell がどのパラメーター セットが使用されているかを判断し、値をコマンドのパラメーターに関連付ける (バインドする) ために使用するプロセスです。 これらの値は、コマンド ラインとパイプラインから取得できます。

詳細な説明

パラメーター バインド プロセスは、コマンド ライン引数をバインドすることによって開始されます。

  1. 名前付きパラメーターをバインドする

    コマンド ラインで、ダッシュで始まる引用符で囲まれていないトークンを見つけます。 トークンがコロンで終わる場合は、引数が必要です。 コロンがない場合は、パラメーターの型を確認し、引数が必要かどうかを確認します。 値が必要な場合は、引数の型をパラメーターで必要な型に変換しようとすると、変換が成功したら、パラメーターをバインドします。

  2. 位置指定パラメーターをバインドする

    使用されていないコマンド ライン引数がある場合は、位置指定パラメーターを受け取るバインドされていないパラメーターを探し、バインドを試みます。

コマンド ライン引数をバインドすると、PowerShell でパイプライン入力のバインドが試みられます。 パイプラインから値をバインドする方法は 2 つあります。 パイプライン入力を受け入れるパラメーターには、次の属性のいずれかまたは両方があります。

  • ValueFromPipeline - パイプラインからの値は、その型に基づいてパラメーターにバインドされます。 引数の型は、パラメーターの型と一致する必要があります。
  • ValueFromPipelineByPropertyName - パイプラインの値は、その名前に基づいてパラメーターにバインドされます。 パイプライン内のオブジェクトには、パラメーターの名前またはそのエイリアスのうち 1 つに一致するプロパティが必要です。 プロパティの型は、パラメーターの型に一致するか、変換できる必要があります。

PowerShell は、パイプライン入力を次の順序でバインドしようとします。

  1. 型変換なしでパラメーター ValueFromPipeline バインドしてみてください。

    正確な型が一致する値でパイプラインからバインドします。 コマンドにパイプライン入力があり、まだバインドされていないパラメーターがある場合は、型に正確に一致するパラメーターにバインドしてみてください。

  2. 型変換なしでパラメーター ValueFromPipelineByPropertyName バインドしてみてください。

    一致する値が見つからない場合は、完全に一致する名前でパイプラインからバインドします。 パラメーターの名前またはそのエイリアスのいずれかに一致する入力オブジェクトのプロパティを探します。 型が完全に一致する場合は、パラメーターをバインドします。

  3. パイプライン入力がバインドされていない場合は、型変換を使用してパラメーター ValueFromPipeline バインドしてみてください。

    パイプライン入力を必要な型に変換しようとします。 変換が失敗した場合、パラメーターはバインドされません。

  4. パイプライン入力がバインドされていない場合は、型変換を使用してパラメーター ValueFromPipelineByPropertyName バインドしてみてください。

    プロパティの名前は、パラメーターの名前またはそのエイリアスのいずれかと一致する必要があります。 入力の種類が一致しない場合は、入力を一致する型に変換します。 変換が失敗した場合、パラメーターはバインドされません。

パラメーター バインディングを視覚化する

パラメーター バインドの問題のトラブルシューティングは困難な場合があります。 Trace-Command コマンドレットを使用して、パラメーター バインド プロセスを視覚化できます。 次の例は、単純なパイプラインのパラメーター バインドをトレースする方法を示しています。

Trace-Command -PSHost -Name ParameterBinding -Expression {
    Get-Item *.txt | Remove-Item
}

出力には、 Expression内のコマンドのパラメーター バインド プロセスのすべてのステップが表示されます。 出力は詳細ですが、パラメーターが予期したとおりにバインドされていない理由を理解するのに役立ちます。 完全な例については、 Visualize パラメーター バインド に関する記事を参照してください。