PowerShell如何处理大数据集?

4

假设Get-ChildItem返回了数百万个项目,PowerShell如何处理?我能分批处理数据吗?命令会阻塞控制台直到数据被检索出来吗?

我是PowerShell的新手,如果有人能解释一下处理返回许多项目/可能需要很长时间才能完成的操作的基本原则,那就太好了。

1个回答

6

Powershell命令每次处理一条记录的数据。如果你将get-childitem的输出通过管道传递到脚本块或另一个命令中,它应该会同时执行两个命令。也就是说,只要有可用的记录,你的脚本块就会立即执行,而get-childitem仍在检索记录。当然,由于这是一个控制台应用程序,控制台自然会被阻塞,直到所有记录都被处理完毕,除非你在处理记录过程中提示用户输入更多数据,或者用户终止命令。如果你需要进行耗时/资源密集型的处理,你可能需要考虑让你的命令使用后台作业(参见此msdn文章)。


1
从技术上讲,您也可以通过使ProcessRecord方法在自己的数据结构中累积记录,然后在EndProcessing方法中处理/生成输出来批处理记录。虽然有一些原因可以这样做,但总是最好将记录作为流程处理,以避免额外的内存需求并利用固有的并行性。 - Paul Wheeler
1
这是一个很好的答案,让我想到了 cmdlet 中的 Begin、Process 和 End 语句 - 我认为也值得一提。Begin 在处理第一条记录之前只会发生一次,Process 针对每个记录重复执行,而 End 是最后执行的事情。虽然与问题不太相关,但如果您要使用自定义 cmdlet 处理大量数据,这也是值得知道的。(对于任何拼写错误,请见谅!) - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接