PowerShell管道

标签 powershell powershell-3.0

如果我运行以下命令:

Measure-Command -Expression {gci -Path C:\ -Recurse -ea SilentlyContinue | where Extension -eq ".txt"}
Measure-Command -Expression {gci -Path C:\ -Filter *.txt -Recurse -ea SilentlyContinue}

第二个表达式总是比第一个表达式更快,我猜是因为它不必使用管道。

我想也许在 Pipeline 方法中 PowerShell 递归了我的驱动器并将对象集合传递给 where 子句,这将必须再次迭代这些项目,但我排除了这一点,因为如果您运行第一个表达式,您可以看到它在递归时返回输出。那么为什么 Pipeline 方法比较慢呢?

最佳答案

使用 Where-Object 总是比使用左侧命令的内置参数慢。您首先将所有对象放入 shell,然后才开始过滤它们(客户端过滤)。

关于 -Filter 参数,它的工作速度更快,因为它在提供程序级别执行(服务器端过滤),对象在访问后就会被检查,并且您只返回符合您条件的对象。

关于PowerShell管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12138799/

相关文章:

powershell - 有使用Windows PowerShell停止进程的简便方法吗?

.net-4.0 - 使用CurrentDomain.SetData ("APP_CONFIG_FILE")在PowerShell ISE中不起作用

windows - Powershell:如何在一行中输出文件夹名称、上次写入时间和文件夹大小?

powershell - 杀死从远程计算机上给定路径运行的多个进程

regex - 带有命名组的替换字符串中的 Powershell 变量

vim - Windows上的Vim开始显示^ M个字符

PowerShell:成员:ISE 中的方法和属性文档

Json 编码 HTML 字符串

powershell - Powershell中的Join语句

Powershell:在 Format-Table 格式中为 Select-Object 中的列值右对齐