2012-03-16 5 views
2

なぜ私は以下のコードのエラーを取得しています:PowerShellのリモートジョブが

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

は、ジョブを受信:コマンドがかかりませんので、入力オブジェクトは、 コマンドのいずれかのための任意のパラメータにバインドすることはできませんパイプライン入力または 入力とそのプロパティがパイプライン入力を受け付けるパラメータと一致しません。行番号:1 char:147 + Get-Job -Id 1 | Select-Object -ExpandProperty childjobs |場所 - オブジェクト{$ _。状態 - eq '完了'} | Select-Object -ExpandProperty id |受信ジョブを< < < <
+ CategoryInfo:InvalidArgument:(2:PSObject)、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

問題はSelect-Object -ExpandProperty idReceive-JobはそれがISA/HASAが結合だために期待しているものではありませんどのSystem.Int32を送信しているということです。 -ExpandPropertyを削除して、System.Management.Automation.PSCustomObjectのIDプロパティを維持します。

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

あなたはSystem.Int32あなたはTrace-Commandを使用することができますReceive-Jobに結合しなかった理由の核心ザラザラ詳細を確認したい場合。この簡単な例では、Int32(現在のプロセスID)をGet-Processにバインドしようとしています。

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

このコマンドの出力には時間がかかりますが、PowerShellがアップストリームオブジェクトをダウンストリームコマンドレットにバインドしようとしたことがすべて表示されます。

+0

+1彼にTrace-Commandを見せて、彼に魚の釣り方法を教えてください:)。 – Marlon