2009-11-12 19 views
5

私はPowerShell 2.0で基本的なバックグラウンドジョブを実行しようとしていますが、start-jobとinvoke-command -asjobではさまざまなことが起こります。開始ジョブと呼び出しコマンド-assjob

私が行う場合は、この:

start-job -scriptblock {get-process}

私はジョブオブジェクトを取得しますが、(スタート・ジョブによって自動的に作成された)子ジョブが常に「NotStarted」のJobStateInfoを持っています。

invoke-command -scriptblock {get-process} -computer localhost -asjob

は私が有効-psremoting ....私が働いてバックグラウンドジョブを取得するために行う必要がある何かを実行しました:

これは、しかし、期待通りに動作しますか?

答えて

4

start-jobを使用した最初の例では、呼び出しにHTTPを使用せず、代わりにWinRMでIPCチャネルを使用して実行します。このように管理者権限は必要ありません。 invoke-commandを使用する2番目の例では、管理者権限(デフォルト)が必要で、HTTPおよびWinRM経由で接続します。

正直言って、私は2番目がほとんどの人にとって失敗すると思っていました。実行した場合:開始ジョブ呼び出しのIDに対してReceive-Jobを実行すると、エラーメッセージが表示されますか?あなたが取得し、仕事とスタート・ジョブによって作成されたジョブを使用する必要があります更新JobStateInfoを受け取るために

+0

いいえ、それは何も返されません(子のジョブがまだ起動されていないとすれば私は期待しています)。 –

+0

ところで...彼らは内部的に違った働きをしていることを知っておきましょう。まだ開始仕事がうまくいかない理由を説明していませんが、少なくとも私は狂気ではありません。 –

0

-Oisin

。ただし、この情報を使用してジョブが終了した時刻を確認している場合は、Wait-JobまたはReceive-Job-waititがニーズに適している可能性があります。

Wait-Jobは、指示されたジョブまたはジョブのリストが完了するまで待ってから移動するだけです。 Receive-Job-waitは同じことを行いますが、ジョブの結果/出力も収集します。

関連する問題