为了补充来自Mathias 的答案,您实际上可以使用Write-Host cmdlet 从现有的cmdlet 可视化进程的顺序,该cmdlet 会立即将输出写入显示器(而不是管道):
$Data = ConvertFrom-Csv @'
Id, Name
4, Four
2, Two
3, Three
1, One
'@
Select-Object例子
$Data |
Foreach-Object { Write-Host 'in:' ($_ |ConvertTo-Json -Compress); $_ } |
Select-Object * |
Foreach-Object { Write-Host 'out:' ($_ |ConvertTo-Json -Compress); $_ }
节目:
in: {"Id":"4","Name":"Four"}
out: {"Id":"4","Name":"Four"}
in: {"Id":"2","Name":"Two"}
out: {"Id":"2","Name":"Two"}
in: {"Id":"3","Name":"Three"}
out: {"Id":"3","Name":"Three"}
in: {"Id":"1","Name":"One"}
out: {"Id":"1","Name":"One"}
Id Name
-- ----
4 Four
2 Two
3 Three
1 One
Sort-Object例子
$Data |
Foreach-Object { Write-Host 'in:' ($_ |ConvertTo-Json -Compress); $_ } |
Sort-Object * |
Foreach-Object { Write-Host 'out:' ($_ |ConvertTo-Json -Compress); $_ }
节目:
in: {"Id":"4","Name":"Four"}
in: {"Id":"2","Name":"Two"}
in: {"Id":"3","Name":"Three"}
in: {"Id":"1","Name":"One"}
out: {"Id":"1","Name":"One"}
out: {"Id":"2","Name":"Two"}
out: {"Id":"3","Name":"Three"}
out: {"Id":"4","Name":"Four"}
Id Name
-- ----
1 One
2 Two
3 Three
4 Four
一般来说,PowerShell cmdlet Write Single Records to the Pipeline 在可能的情况下(此鼓励指南的优点之一是它可以减少内存消耗)。正如您的问题所暗示的那样,Sort-Object 不能这样做,因为最后一条记录可能在第一条记录之前。但也有例外,在技术上可以根据鼓励的指南编写单个记录,但事实并非如此。参见例如:#11221 Select-Object -Unique is unnecessary slow and exhaustive