2

以下のコードでエラーが発生するのはなぜですか。

Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object -ExpandProperty id | Receive-Job 

Receive-Job:コマンドがパイプライン入力を受け取らないか、入力とそのプロパティがパイプライン入力を受け取るパラメーターのいずれとも一致しないため、入力オブジェクトをコマンドのパラメーターにバインドできません。行:1 char:147 + Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object{$_。state-eq'完了'}| Select-Object -ExpandProperty id | Receive-Job <<<<
+ CategoryInfo:InvalidArgument:(2:PSObject)[Receive-Job]、ParameterBindingException + FullyQualifiedErrorId:InputObjectNotBound、Microsoft.PowerShell.Commands.ReceiveJobCommand

ただし、この行は完全に機能します。

Receive-Job (Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object -ExpandProperty id )

コードに関するヒントや役立つコメントをいただければ幸いです。PowerShellは初めてです。

ありがとう

4

1 に答える 1

4

問題は、ISA/HASAバインディングに期待しているものではないをSelect-Object -ExpandProperty id送信していることです。IDプロパティを保持するように削除します。System.Int32Receive-Job-ExpandPropertySystem.Management.Automation.PSCustomObject

Get-Job -Id 1 | Select-Object -ExpandProperty childjobs | Where-Object {$_.state -eq 'Completed'} | Select-Object id | Receive-Job

System.Int32がバインドされなかった理由の詳細を確認したい場合は、Receive-Jobを使用できますTrace-CommandInt32この簡略化された例では、 (現在のプロセスID)をにバインドしようとしGet-Processます。

Trace-Command -Name ParameterBinding  -Option All -Expression { $PID | Get-Process } -PSHost

このコマンドの出力は長くなりますが、PowerShellがアップストリームオブジェクトをダウンストリームコマンドレットにバインドするために実行しようとしたすべてのことを示しています。

于 2012-03-16T16:02:27.087 に答える