使用带有First参数的Select-Object时,OutVariable包含不正确的数据

时间:2016-11-21 12:59:57

标签: powershell powershell-v5.0

 $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

1 个答案:

答案 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的优化功能仅适用于在处理对象时将对象写入管道的命令。它对缓冲已处理对象的命令没有影响,并将它们作为集合

写入