Windows PowerShell 提供多个 cmdlet,可让你直接控制数据输出。 这些 cmdlet 具有两个重要的共同特征。
第一,它们通常将数据转换为某种形式的文本。 这样做的原因是它们将数据输出到需要文本输入的系统组件。 这意味着它们需要将对象表示为文本。 因此,文本的格式设置为你在 Windows PowerShell 控制台窗口中看到的形式。
第二,这些 cmdlet 使用 Windows PowerShell 谓词 Out,因为它们会将信息从 Windows PowerShell 发送到别处。 Out-Host cmdlet 也不例外:主机窗口显示在 Windows PowerShell 之外。 这一点尤为重要,原因是将数据发送出 Windows PowerShell 时,实际上已删除该数据。 在你尝试创建用于将数据分页到主机窗口的管道,然后尝试将其格式化为列表时,可以看到此内容,如下所示:
Get-Process | Out-Host -Paging | Format-List
你可能希望命令显示列表格式的进程信息页。 但是,它将显示默认表格式列表:
PS C:/Users/maxsu> Get-Process | Out-Host -Paging | Format-List
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
400 23 14764 29344 0.25 16796 17 ApplicationFrameHost
345 32 7504 19004 0.14 20168 17 BOCBankTray
397 28 12244 22820 0.08 172 17 BOCUsertool
143 9 1728 8592 0.00 4008 17 browser_broker
363 39 70304 98260 19.30 3808 17 chrome
520 31 138940 113608 32.03 10712 17 chrome
531 40 17064 34220 4.06 11728 17 chrome
148 9 1676 6640 0.03 15100 17 chrome
212 16 12792 20284 0.05 17360 17 chrome
1431 62 87128 201968 40.75 17836 17 chrome
136 11 1980 8768 0.02 18408 17 chrome
357 35 64620 100268 27.59 20780 17 chrome
118 8 6540 336 0.02 6024 17 conhost
385 25 10004 26428 0.19 16228 17 conhost
832 25 2028 1820 704 0 csrss
597 21 2600 5368 16288 17 csrss
624 29 9940 24468 3.70 20612 17 ctfmon
386 20 5896 11168 16936 0 dasHost
138 8 1944 7000 0.05 6916 17 dllhost
231 23 5288 12648 0.13 16100 17 dllhost
933 44 62692 63336 11424 17 dwm
2323 96 88888 180500 8.67 13348 17 explorer
32 8 5348 14420 840 17 fontdrvhost
32 6 2036 700 1008 0 fontdrvhost
... ...
238 13 2580 3520 3512 0 IRMTService
157 10 1424 1452 9720 0 jhi_service
586 33 20364 20536 0.73 12620 17 KGService
857 42 81552 97624 5.16 11908 17 KuGou
267 27 37348 46284 5.56 15464 17 KuGou
284 16 3808 3912 9752 0 LMS
1535 29 9328 14336 72 0 lsass
0 0 584 59752 2152 0 Memory Compression
885 48 33304 10040 0.73 18996 17 MicrosoftEdge
501 23 6568 27636 0.14 12524 17 MicrosoftEdgeCP
267 13 3936 3304 0.05 15848 17 MicrosoftEdgeSH
2993 22 693504 78596 7556 0 mysqld
<SPACE> 下一页;<CR> 下一行;Q 退出
171 15 769156 28840 9272 0 mysqld
<SPACE> 下一页;<CR> 下一行;Q 退出
Out-Host cmdlet 直接将数据发送到控制台,因此 Format-List 命令绝不会收到任何要进行格式化的内容。
构建此命令的正确方法是将 Out-Host cmdlet 置于管道末尾,如下所示。 这将导致进程数据先在列表中格式化,然后再分页和显示。
PS C:/Users/maxsu> Get-Process | Format-List | Out-Host -Paging
Id : 16796
Handles : 400
CPU : 0.25
SI : 17
Name : ApplicationFrameHost
Id : 20168
Handles : 345
CPU : 0.140625
SI : 17
Name : BOCBankTray
Id : 172
Handles : 397
CPU : 0.078125
SI : 17
Name : BOCUsertool
Id : 4008
Handles : 143
CPU : 0
SI : 17
Name : browser_broker
Id : 3808
Handles : 366
CPU : 20.875
SI : 17
Name : chrome
Id : 10712
Handles : 520
CPU : 34.65625
SI : 17
Name : chrome
这适用于所有 Out cmdlet。 Out cmdlet 应始终出现在管道末尾。
注:所有 Out cmdlet 都使用对控制台窗口有效的格式(包括行长度限制)将输出呈现为文本。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/266828.html