Расположение OutVariable в конвейере дает неожиданный результат - PullRequest
2 голосов
/ 20 мая 2019

Я не уверен, что это простая ошибка, ошибка или что-то еще, что мне не хватает, но я ожидаю, что следующие фрагменты кода вернут тот же результат в $files.Count outvariable.
c:\ содержит 4 файла в моей системе.

gci c:\ -file -ov files | sort lastwritetime | select -first 2 | Out-Null
$files.Count # returns 4

gci c:\ -file | sort lastwritetime -ov files | select -first 2 | Out-Null
$files.Count # returns 2

Часть конвейера select -first 2 влияет на переменную $files во втором примере.


Редактировать благодарность PetSerAl и JosefZ за указание мне на ответ

Sort-Object должен потреблять все входные элементы, чтобы начать сортировку, но это не нужно писать их все на выходе. Это может остановиться, как только Выберите объект спросите его.

(мое текущее понимание вещей) выходная переменная $files получает свои значения из outputtream из команды sort, и outputtream может прекратить запись, если об этом попросит следующая команда.

Этот надуманный пример показывает, что содержимое переменной $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

$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     
...