Powershell工作流在内存中发出嘎嘎声并崩溃

Powershell工作流在内存中发出嘎嘎声并崩溃,powershell,memory-management,workflow-foundation,Powershell,Memory Management,Workflow Foundation,我正在powershell中尝试工作流,并注意到一些奇怪的行为。当目录中不包含很多文件时,下面的脚本将起作用。经过一段时间后,它将保持在第6行(在ise中运行时,您将看到工作流状态栏),咀嚼内存,然后最终崩溃(至少半小时后)。当文件目录至少为1.25GB时会发生此崩溃,但当$Path只有50mb文件时不会发生此崩溃。这里有一个简单的测试: Workflow Test-Me { Param ( $Path = "c:\temp", $Days = 0

我正在powershell中尝试工作流,并注意到一些奇怪的行为。当目录中不包含很多文件时,下面的脚本将起作用。经过一段时间后,它将保持在第6行(在ise中运行时,您将看到工作流状态栏),咀嚼内存,然后最终崩溃(至少半小时后)。当文件目录至少为1.25GB时会发生此崩溃,但当
$Path
只有50mb文件时不会发生此崩溃。这里有一个简单的测试:

Workflow Test-Me {
    Param
    (
        $Path = "c:\temp",
        $Days = 0
    )
    $Files = InlineScript{
                Get-ChildItem -Path $using:Path -File -Recurse -Force | Where-Object {$_.LastWriteTime -lt ((get-date).AddDays(-$using:Days))}
             }
    $Files
}
现在奇怪的是,当
getchilditem-Path$using:Path-File-Recurse-Force |其中对象{$$\ LastWriteTime-lt((Get date).AddDays($using:Days))}
从工作流外部运行时(在常规函数中或仅在shell的一行中),它在不到一分钟的时间内完成,即使有1.25GB的文件

工作流在做什么导致它消耗内存、花费很长时间并崩溃?这显然是在做一些意想不到的事情。同样,如果目录中只有几个文件,它也可以工作

此外,一个解决方案/解决方案也很好

研究:


这里的问题似乎与对象数据的保留有关。添加select会大大减少返回对象数据的大小,因此搜索100GB+不会导致其崩溃。解决办法如下:

Workflow Test-Me {
    Param
    (
        $Path = "c:\temp",
        $Days = 0
    )
    $Files = InlineScript{
                Get-ChildItem -Path $using:Path -File -Recurse -Force | Where-Object {$_.LastWriteTime -lt ((get-date).AddDays(-$using:Days))} | select filename
             }
    $Files
}