$somevar = Get-Process -OutVariable var | Select-Object -First 5
为什么$ var = $ somevar(两者都只有前5个对象)?为什么没有-OutVariable
将正确的输出保存到$ var?我很困惑。
C:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.14393.206
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14393.206
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
C:\> [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
答案 0 :(得分:3)
In Powershell 3.0 optimization was included with Select-Object。您正在看一个功能
从Windows PowerShell 3.0开始,Select-Object包含一个优化功能,可防止命令创建和处理未使用的对象。 当您在命令管道中包含带有First或Index参数的Select-Object命令时,即使命令生成,Windows PowerShell也会在生成所选数量的对象后立即停止生成对象的命令生成对象的对象出现在管道中的Select-Object命令之前。要关闭此优化行为,请使用Wait参数。
使用-Wait
取消此行为。执行此命令需要更长时间,但它允许您发生预期的行为。
如果对任何人都很重要,那么在优化功能先决条件上有一个注意事项:
Select-Object的优化功能仅适用于在处理对象时将对象写入管道的命令。它对缓冲已处理对象的命令没有影响,并将它们作为集合
写入