【问题标题】:Start-Job via Invoke-Command: Job is only available in remote session通过 Invoke-Command 启动作业:作业仅在远程会话中可用
【发布时间】:2017-07-03 11:37:01
【问题描述】:

我正在尝试通过以下命令在不同的服务器上启动 TShark:

Invoke-Command -Session $remoteSession -ScriptBlock {start-job -ScriptBlock {& 'C:\Program Files\Wireshark\tshark.exe' -b filesize:10000 -b files:5 -w "$tsharkResultDirectory\tshark.pcap"} -Name "TShark"}

该命令有效,一切正常。但是当我通过例如连接到远程服务器时远程桌面,并执行命令Get-Job 没有返回任何内容。 这意味着预先启动的作业仅在远程会话中运行。有谁知道是否有办法在“全球”范围内开始工作。如果我不小心关闭了 PowerShell 窗口,我不希望 TShark 停止跟踪。

谢谢

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您是正确的,该作业仅在 PowerShell 主机会话期间存在,这就是您在 RDP 时无法检索它的原因。

    更好的方法可能是使用Invoke-Command-AsJob 开关。然后,您可以通过在本地计算机上运行 Get-Job 而不是 RDP 到远程主机来检索结果:

    Invoke-Command -Session $remoteSession -ScriptBlock { & 'C:\Program Files\Wireshark\tshark.exe' -b filesize:10000 -b files:5 -w "$tsharkResultDirectory\tshark.pcap" } -AsJob -Name "TShark"
    

    再次注意,如果您结束本地 PowerShell 会话,您将失去工作。

    我相信运行远程作业并使其持久化的唯一其他方法是通过 *-ScheduledJob 命令,因为它们将结果记录在磁盘上:

    PS C:\> get-command *ScheduledJob | Select Name
    
    Name                   
    ----                   
    Disable-ScheduledJob   
    Enable-ScheduledJob    
    Get-ScheduledJob       
    Register-ScheduledJob  
    Set-ScheduledJob       
    Unregister-ScheduledJob
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      相关资源
      最近更新 更多