Powershell OutVariable在管道中的位置给出了意外的结果

Powershell OutVariable在管道中的位置给出了意外的结果,powershell,pipeline,Powershell,Pipeline,我不确定这是否是一个简单的问题、一个bug或任何我遗漏的东西,但我希望下面的代码片段在$files.Countoutvariable中返回相同的结果。 c:\在我的系统中包含4个文件 管道的select-first 2部分影响第二个示例中的$files变量 编辑cudo向PetSerAl和JosefZ致谢,感谢他们为我指点答案 排序对象需要使用所有输入项才能开始排序,但 不需要将它们全部写入输出。它可能会尽快停止 选择对象并询问它 (我目前对事物的理解)输出变量$files从sort命令的ou

我不确定这是否是一个简单的问题、一个bug或任何我遗漏的东西,但我希望下面的代码片段在
$files.Count
outvariable中返回相同的结果。
c:\
在我的系统中包含4个文件

管道的
select-first 2
部分影响第二个示例中的
$files
变量


编辑cudo向PetSerAl和JosefZ致谢,感谢他们为我指点答案

排序对象需要使用所有输入项才能开始排序,但 不需要将它们全部写入输出。它可能会尽快停止 选择对象并询问它

(我目前对事物的理解)输出变量
$files
sort
命令的outputstream获取其值,如果下一个命令要求,outputstream可以停止写入

这个人为的示例显示,
$files
变量的内容根据下面的命令而变化

gci c:\ -file | sort -ov files | sort | select -f 1 | Out-Null;$files.count # all files
gci c:\ -file | sort -ov files        | select -f 1 | Out-Null;$files.count # 1 file


我更改了
-OutVariable
目标的名称,以防它们互相做了可怕的事情。。。我得到了同样的结果。如果我注释掉代码第二行中的
Select对象
,我会得到所有的项[36,在我的测试中,
$env:temp
]——因此正是
Select对象
在做某事..//win7,ps5.1///我不知道发生了什么事。。。[blush]
选择对象-前2个-等待
@PetSerAl-这可以工作,但不是预期的行为。为了使powershell只能选择两个对象,它必须首先执行
排序对象
,因此我认为可以安全地假设
$allfiles
将包含这两种情况下的所有文件。我只需要养成习惯,在管道中尽快分配OutVariable。是否有描述此行为的链接?:在包含Sort Object cmdlet的命令中不需要Wait参数,因为Sort Object处理所有对象,然后返回集合。“选择对象优化”仅适用于在处理对象时单独返回对象的命令。@LievenKeersmaekers
Sort Object
需要使用所有输入项才能开始排序。但它不需要将它们全部写入输出。只要
选择对象
询问它,它就可以停止。
gci c:\ -file | sort -ov files | sort | select -f 1 | Out-Null;$files.count # all files
gci c:\ -file | sort -ov files        | select -f 1 | Out-Null;$files.count # 1 file
$PSVersionTable

Name                           Value                                                                                                                                                                       
----                           -----                                                                                                                                                                       
PSVersion                      5.1.16299.967                                                                                                                                                               
PSEdition                      Desktop                                                                                                                                                                     
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                                     
BuildVersion                   10.0.16299.967                                                                                                                                                              
CLRVersion                     4.0.30319.42000                                                                                                                                                             
WSManStackVersion              3.0                                                                                                                                                                         
PSRemotingProtocolVersion      2.3                                                                                                                                                                         
SerializationVersion           1.1.0.1