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 都使用对控制台窗口有效的格式(包括行长度限制)将输出呈现为文本。