Powershell-工作流中的动态变量名称

Powershell-工作流中的动态变量名称,powershell,variables,dynamic,parallel-processing,workflow,Powershell,Variables,Dynamic,Parallel Processing,Workflow,是否可以在PowerShell工作流中创建动态变量名 我想要一些代码,其中一些文件的内容放在一个变量中 我知道这很简单,就像这样: ForEach ($file in $files) { $list = Get-content $srcdirectory\$file $longlist = $longlist + $list } 通过这种方式,一个文件的内容被放入$list中,然后放入$longlist中。然后,它从下一个文件开始,将该内容放入$list,并将其添加到$lon

是否可以在PowerShell工作流中创建动态变量名

我想要一些代码,其中一些文件的内容放在一个变量中

我知道这很简单,就像这样:

ForEach ($file in $files) { 
    $list = Get-content $srcdirectory\$file
    $longlist = $longlist + $list
}
通过这种方式,一个文件的内容被放入
$list
中,然后放入
$longlist
中。然后,它从下一个文件开始,将该内容放入
$list
,并将其添加到
$longlist
$list
中的旧内容被新内容覆盖,但新内容将添加到
$longlist
,在旧内容之后)

但我想并行地执行此操作,因此同时读取每个文件以提高速度。
因此,我的想法是创建一个
工作流
(Foreach-Parallel所必需),在其中放入一个
Foreach-Parallel
循环,并对每个文件(以及每个“线程”)使用一个不同的变量,以便在脚本中稍后组合这些变量。
我试过这个:

workflow workflow1 {
    ForEach -Parallel ($file in $files) { 
        $list = Get-content $file
        New-Variable -Name "var$file" -Value $list
    }
}
但由于这“不适用于工作流”,它将不会以这种方式工作。
我怎样才能做到这一点呢

注意:我已经尝试使用作业来实现这一点,但这比一个接一个的文件慢10倍,这不是我想要的。我希望它比一个文件接一个文件快。

我也读了一些关于运行空间的内容,但我找不到一个很好的解释或教程。

这里是一个非常棒的运行空间实现,易于使用,并附有示例:Invoke Parallel:。它可以让你使用与作业基本相同的语义。如果单线程CPU性能是文件读取的限制因素,而不是磁盘IO,你有什么样的计算机?每次执行
$longlist=$longlist+$list
时,powershell都会创建一个新的更大的数组,并将longlist复制到其中。它在循环中的运行速度非常慢,这是众所周知的。如果您更改
[System.Collections.ArrayList]
的longlist并使用
$longlist.Add($list)
,您可能会看到性能的提高。与Get Content一样,它的运行速度很慢,因为它有很多选项,并且可以与其他PSProvider一起使用,而不仅仅是文件系统;您可以通过更改
[System.IO.File]::ReadAllLines()
来提高性能,这应该可以让您在短时间内使用运行空间,这是我发现的,我没有回头看。