如何调试PowerShell后台作业?

时间:2011-03-04 16:20:34

标签: powershell powershell-jobs

杰森·阿切尔帮我解决了my last issue,但在测试他的解决方案时,我偶然发现了真正的问题。我的服务器不能正确运行链式后台作业,但我的笔记本电脑会。

如果我在笔记本电脑上运行上一个问题中的脚本,它们就能完美运行。脚本A将脚本B作为后台作业启动,脚本B从该作业中调用脚本C,并接收所有输出。如果我在服务器上运行完全相同的脚本,则脚本A调用脚本B,脚本B无限期挂起。如果我直接运行脚本B,它将在服务器或笔记本电脑上完美运行。这是关于被扼杀我的工作的事情。

$ PSVersionTable在所有计算机上返回相同的结果,但显然我必须在WinXP和Win2003R2上使用不同的安装程序。

可能导致行为差异的原因是什么?

有没有办法解决后台工作中发生的事情?如果我能看到接收到的命令行(我已经记录了发送的内容,但有时会发生漂移),或者什么对象真的挂了东西,也许会有所帮助,但是调试器不会把我带到那里。也许有一种方法可以在ISE中调用该作业,就好像它在后台运行一样?

2 个答案:

答案 0 :(得分:1)

阿。我想也许我有答案。

笔记本:

PS Z:\jobs> winrm quickconfig
WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.

服务器:

PS D:\jobs> winrm quickconfig
WinRM already is set up to receive requests on this machine.
WinRM is not set up to allow remote access to this machine for management.
The following changes must be made:

Create a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.

如果有人可以确认这一点或提供有关排除后台工作的信息,我会将问题标记为已回答。

答案 1 :(得分:0)

您可以使用接收作业获取Powershell作业的输出结果。例如,如果我们有如下工作:

$myJob = start-job -ScriptBlock  { 
    Write-Output "Some stuff happening..."
    throw "Hello World!"
}

我们可以得到这样的作业输出:

Receive-Job $myJob    #prints the message and exception