手動パラメーターを使用してパイプラインをオーバーライドする
コマンドのパラメーターを手動で入力するたびに、パラメーターで受け入れられた可能性のあるパイプライン入力をオーバーライドします。 パイプライン パラメーター バインドに別のパラメーターを選択するように Windows PowerShell を強制することはありません。 次に例を示します。
Get-Process -Name Notepad | Stop-Process –Name Notepad
この例では、Get-Process は Name プロパティを持つプロセス オブジェクトを取得し、そのオブジェクトを Stop-Process に渡します。 ただし、この例では、–Name パラメーターは既に手動で使用されています。 これにより、パイプライン パラメーターのバインドが停止されます。 Windows PowerShell では、他のプロパティを受け入れるパラメーターがある場合でも、入力をバインドする別のパラメーターは検索されません。 上記の例では、Windows PowerShell で使用する必要があったパラメーターが取得されるため、プロセスは終了します。
このような場合、およびほとんどのケースで、プロパティ値がパラメーターに指定した値と一致する場合でも、エラーが発生します。 上記のコマンドでは、次のエラーが表示されます。
Stop-Process : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
このエラーは誤解を招くものです。 “… the command doesn't take pipeline input. (コマンドはパイプライン入力を受け取りません。)” しかし、コマンドはパイプライン入力を受け取ります。 この例では、Windows PowerShell で使用する必要があったパラメーターを手動で指定したため、パイプライン入力を受け入れるコマンドの機能を無効にしていました。