您的脚本的性能问题是:
-
您将多次迭代
Orig.csv
输入文件。
使用您的文件和特定的内容创建哈希表会更快$refs
要测试的值。
-
您将多次重新打开输出文件以附加到它。
为此,使用(3)stepablepipelines 速度更快,请参阅:SteppablePipeline 有什么好处 https://stackoverflow.com/a/73074477/1701026.
请注意正确设置PowerShell管道 https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_pipelines内存使用率较低。
-
The
-eq
运算符可能比-like
操作员
(显然你不需要-like
运算符,因为值中没有任何通配符。)
您可能只是依赖于常见的比较运算符 https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_comparison_operators特征:
当运算符的输入是标量值时,该运算符返回布尔值。当输入是集合时,运算符返回与表达式右侧值匹配的集合元素。如果集合中没有匹配项,比较运算符将返回一个空数组。
$workdir = ...
$refs =@{
"File1.csv" = 'COLMABQ140','COLMABQ141','COLMABQ142','COLMABQ143','COLMABQ144','COLMABQ176','COLMABQ177','COLMABQ178','COLMABQ179','COLMABQ180'
"File2.csv" = 'COLMABP140','COLMABP141','COLMABP142','COLMABP143','COLMABP144','COLMABP176','COLMABP177','COLMABP178','COLMABP179','COLMABP180'
"File3.csv" = 'COLMABS140','COLMABS141','COLMABS142','COLMABS143','COLMABS144','COLMABS176','COLMABS177','COLMABS178','COLMABS179','COLMABS180'
}
$Pipelines = @{}
Import-csv .\Orig.csv |ForEach-Object -Begin {
foreach ($file in $refs.keys) {
$Pipelines[$file] = { Export-CSV -notype -Path "$workdir\$file" }.GetSteppablePipeline()
$Pipelines[$file].Begin($True)
}
} -Process {
foreach ($file in $refs.keys) {
if ($refs[$file] -eq $_.'Campaign Ref Code') { $Pipelines[$file].Process($_) }
}
} -End {
foreach ($file in $refs.keys) {
$Pipelines[$file].End()
}
}
掌握(可步进)管道
的力量PowerShell管道 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipelines经常被误解和低估(特别是被不具有类似功能的语言的经验丰富的程序员所误解和低估)。因此,我写了一篇 PowerShell 社区博文:掌握(可步进)管道 https://devblogs.microsoft.com/powershell-community/mastering-the-steppable-pipeline/.