当我从 cmd 启动 powershell “作业” 时,我可以在哪里接收该作业的结果?

当我从 cmd 启动 powershell “作业” 时,我可以在哪里接收该作业的结果?

假设我运行如下 PowerShell 脚本:

C:\utils\powershell\MDB_BE>powershell -File .\MonitorFileSize.ps1

WARNING: column "Command" does not fit into the display and was removed.

Id              Name            State      HasMoreData     Location
--              ----            -----      -----------     --------
1               Job1            Running    True            localhost

...并且该 PowerShell 脚本启动了一项作业...

当我打开另一个 PowerShell 窗口时,我注意到运行时该作业未列出Receive-Job 1,那么该作业去哪儿了,我如何才能让它继续运行,并在退出 Powershell 进程时再次找到它?

答案1

Get-Job 仅返回当前会话中的作业对象。该作业在 Powershell.exe 下作为线程运行,因此如果退出 Powershell,该作业将被中止。

这是一个关于 Powershell 作业的很好的链接:

http://startlearningpowershell.com/?Name=PowerShell%20and%20Background%20Jobs

在第一部分中,它是这样说的:

它们不是计划任务,如果 PowerShell 当前没有运行,它们将不会运行。

编辑:从技术上讲,一些 Powershell 作业会产生全新的 Powershell 进程实例,而有些则不会。

编辑 2:因此,为了更准确地回答您的问题:当您从 cmd.exe 启动 Powershell 时,cmd.exe 会生成一个 Powershell.exe 实例,并以 cmd.exe 作为其父级。如果该 Powershell 脚本中的作业随后启动了一个需要另一个 Powershell.exe 进程的 PS 作业,则会创建另一个作业作为第一个 Powershell.exe 的子进程。如果脚本中的 PS 作业未完成,并且您的 Powershell 在作业完成运行之前关闭,请考虑在您的脚本中加入 Wait-Job。

相关内容