我正在尝试在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 ....我还需要做些什么来让后台工作正常工作?
答案 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做同样的事情,但它也收集作业的结果/输出。