Powershell 如果我不';你没收到吗?

Powershell 如果我不';你没收到吗?,powershell,workflow,Powershell,Workflow,我使用-AsJob参数调用了一个长时间运行的作业。它定期写入需要使用Retrieve Jobcmdlet检索的警告和输出消息 我很好奇PowerShell将尚未检索到的作业输出存储在何处,以及是否存在实际上限。如果是这样,它会以FIFO方式自动清除作业输出吗?崩溃?我不知道这是否真的回答了你的问题,但我尝试了各种各样的启动作业命令,它们只是创建了一个从1到一个大数字的范围-大多数命令都出现了内存不足异常,但我最终得到了一个工作到完成的异常: # these all bombed out Star

我使用
-AsJob
参数调用了一个长时间运行的作业。它定期写入需要使用
Retrieve Job
cmdlet检索的警告和输出消息


我很好奇PowerShell将尚未检索到的作业输出存储在何处,以及是否存在实际上限。如果是这样,它会以FIFO方式自动清除作业输出吗?崩溃?

我不知道这是否真的回答了你的问题,但我尝试了各种各样的
启动作业
命令,它们只是创建了一个从1到一个大数字的范围-大多数命令都出现了内存不足异常,但我最终得到了一个工作到完成的异常:

# these all bombed out
Start-Job -ScriptBlock { 1..4000000000 }
Start-Job -ScriptBlock { 1..2000000000 }
Start-Job -ScriptBlock { 1..1000000000 }
# this one finally started evaluating
Start-Job -ScriptBlock { 1..100000000 }
我让它运行了一段时间,在评估范围时,它消耗了一个完整的CPU核心。根据任务管理器的说法,它最终使用了大约5GB的RAM,本可以使用更多的RAM,但此时物理内存开始耗尽。CPU使用率下降,因为操作系统不得不疯狂地开始分页内存

正如您在下面的屏幕截图中所看到的,它实际上产生了另一个powershell.exe进程——因此我想这部分回答了您的问题,即在作业运行时,它将数据存储在哪里。似乎有一个实际的限制,这取决于可用的资源。PowerShell不会清除或以其他方式丢失作业缓冲区中的信息(除非第二个进程崩溃),但检索这么多数据也可能会有问题。您可能希望进行一些试运行,看看您的环境可以支持哪些可接受的和实际的限制

注意:使用更小的范围,如1..100000,可以提供更多的记录来观察行为,同时不会完全淹没系统。我使用了较大的数字来了解实际限制是什么


谢谢你的回答。我想我仍然不是100%清楚的是PowerShell在暂停工作流程(这与我认为的常规工作有点不同)中的作用。由于它们可以在重新启动后继续运行,因此也必须保持排队作业输出。但这听起来似乎没有真正的上限,除了内存/进程限制。谢谢你的意见。