Start-job vs. Invoke-command -asjob

时间:2009-11-12 22:09:49

标签: powershell powershell-v2.0 invoke-command start-job

我正在尝试在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 ....我还需要做些什么来让后台工作正常工作?

2 个答案:

答案 0 :(得分:4)

使用start-job的第一个示例不使用HTTP进行调用,而是使用带有WinRM的IPC通道运行;它不需要这种方式的管理权限。使用invoke-command的第二个示例确实需要管理员权限(默认情况下),并且将通过HTTP和WinRM进行连接。

说实话,我原本预计第二个人会因大多数人而失败。如果您对启动作业调用的ID运行:Receive-Job,您是否收到任何错误消息?

-Oisin

答案 1 :(得分:0)

要接收更新的JobStateInfo,您需要使用Get-Job和Start-Job创建的作业。但是,如果您使用此信息来查看作业何时完成,则Wait-Job或Receive-Job -wait可能更适合您的需求。

等待作业只需等到作业或作业列表完成后再继续。 Receive-Job -wait做同样的事情,但它也收集作业的结果/输出。