6

PowerShell 2.0 で基本的なバックグラウンド ジョブを実行しようとしていますが、start-job と invoke-command -asjob で異なる結果が得られます。

私がこれを行う場合:

start-job -scriptblock {get-process}

ジョブ オブジェクトを取得しましたが、(start-job によって自動的に作成された) 子ジョブの JobStateInfo は常に "NotStarted" です。

ただし、これは期待どおりに機能します。

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

enable-psremoting を実行しました....バックグラウンド ジョブを機能させるために他に必要なことはありますか?

4

2 に答える 2

3

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

正直なところ、ほとんどの人にとって 2 番目の方法は失敗すると予想していました。start-job 呼び出しの ID に対して Receive-Job を実行すると、エラー メッセージが表示されますか?

-オイシン

于 2009-11-12T23:15:19.350 に答える
0

更新された JobStateInfo を受け取るには、Get-Job と Start-Job によって作成されたジョブを使用する必要があります。ただし、この情報を使用してジョブがいつ終了するかを確認する場合は、Wait-Job または Receive-Job -wait の方がニーズに適している可能性があります。

Wait-Job は、指定されたジョブまたはジョブのリストが終了するまで待機してから次に進みます。Receive-Job -wait も同じことを行いますが、ジョブの結果/出力も収集します。

于 2015-03-16T15:17:24.543 に答える