【问题标题】:How do I debug a PowerShell background job?如何调试 PowerShell 后台作业?
【发布时间】:2011-07-08 23:03:46
【问题描述】:

Jason Archer 帮助我解决了 my last issue,但在测试他的解决方案时,我偶然发现了真正的问题。我的服务器无法正确运行链接的后台作业,但我的笔记本电脑可以。

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

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

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

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

【问题讨论】:

    标签: powershell powershell-jobs


    【解决方案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.
    

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

    【讨论】:

    • 我怀疑我的问题的解决方案是在我的所有服务器上启用远程处理,但我可以使用 Start-Process 将这些作为前台作业启动。这行得通。
    【解决方案2】:

    您可以使用 Receive Job 获取 Powershell 作业的输出结果。例如,如果我们有这样的工作:

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

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

    Receive-Job $myJob    #prints the message and exception
    

    【讨论】:

    • 根据我最初的问题,在启用远程处理的计算机上运行时,我可以毫无问题地接收我的工作。这不是混淆的重点。我正在尝试(虽然现在不是很难)找出问题是 WMI 还是远程处理。我已经听到了答案,但我已经接近在我们所有的服务器上启用远程处理。那将是快乐的一天。
    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多