2011-03-04 113 views
1

Jason Archer帮我解决了my last issue,但在测试他的解决方案时,我偶然发现了真正的问题。我的服务器不会正确运行链接后台作业,但我的笔记本电脑会。如何调试PowerShell后台作业?

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

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

什么可能会导致行为上的差异?

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

回答

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. 

如果任何人都可以证实这一点,或者提供故障排除后台作业的信息,我会标记回答了这个问题。

+0

我怀疑的解决我的问题,将是对所有启用远程我的服务器,但我可以使用Start-Process将它们作为前台作业启动。这很奏效。 – codepoke 2011-03-04 16:51:52

0

您可以通过使用接收作业来获得Powershell作业的输出结果。举例来说,如果我们有一个工作像如下:

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

我们可以得到这份工作,像这样的输出:

Receive-Job $myJob #prints the message and exception 
+0

根据我的原始问题,在启用远程处理的计算机上运行时,我可以毫无困难地接收我的作业。这不是混淆的地方。我正在尝试(尽管现在不是很难)来确定问题是出在WMI还是远程处理上。我已经听到了答案,但我已经接近在我们所有服务器上启用了远程处理功能。那将是美好的一天。 – codepoke 2011-05-05 12:08:00