Powershell 通过Invoke命令启动作业:作业仅在远程会话中可用

Powershell 通过Invoke命令启动作业:作业仅在远程会话中可用,powershell,Powershell,我正在尝试通过以下命令在不同的服务器上启动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"} 命令有效,一切正常。但

我正在尝试通过以下命令在不同的服务器上启动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停止跟踪


Thx

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

更好的方法可能是使用
Invoke命令的
-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