PowerShell 笔记 - 输出格式化

格式化用于覆盖默认值并为命令创建自定义的输出格式

默认格式

powershell的格式定义在.format.ps1xml文件中, 在powershell的安装目录下面

> cd $PSHOME
> get-process | gm # 查询process的类型为 System.Diagnostics.Process, 在DotNetTypes.format.ps1xml 文件中查找它, 其中定义了对象的输出格式

第一个规则是系统会检查对象类型是否已经被预定义视图处理过。也就是我们在“DotNetType.format.ps1xml ”中所见到的:一个针对-process 对象的预定义视图。PowerShell中还预装了其他的“.format.ps1xml ”文件,这些文件在Shell启动时会被自动加载

第二个格式化规则:格式化系统会查找是否有人为该对象类型预定义默认显示属性集。这些可以在另外一个配置文件“Types.ps1xml”中找到

格式化第三个规则—用于确定输出样式。如果格式化系统显示4个或以下的属性,输出结果会以表格形式展现。如果有5个或以上的属性,输出结果会使用列表形式

格式化表格

Format-Table 常用属性

  • autosize 强制结果集仅保存足够的列空间,使得表格更加紧凑,但是会使得Shell花费额外时间生成输出结果
  • property 接收一个逗号分隔符列表,该列表包含期望显示的属性值
  • groupby 每当指定的属性值发生变化时,生成一个新的列头集合
  • wrap 如果Shell需要把列的信息截断,会在列尾带上省略号(… )以便标识信息被截断

格式化列表

把对象输出格式转化为列表

Get-Process | Format-List

格式化宽列表

仅仅展示一个属性的值, 默认会查找对象的name属性, col指定输出列数

Get-Process | Format-Wide name -col 9

自定义列与列表头目

> Get-Service | Format-Table @{name='ServiceName';expression={$_.Name}},Status,DisplayName

ServiceName                                 Status DisplayName
-----------                                 ------ -----------
AarSvc_98c709f                             Stopped Agent Activation Runtime_98c709f
AJRouter                                   Stopped AllJoyn Router Service
ALG                                        Stopped Application Layer Gateway Service
AntiCheatExpert Service                    Stopped AntiCheatExpert Service
AppIDSvc                                   Stopped Application Identity
...

> Get-Process | Sort-Object VM -Descending | Format-Table @{l='ServiceName';e={$_.Name}},@{l='VM(MB)';e={$_.VM / 1MB}}

windows 还提供了另一种输出结果Out-GridView. OutGridView绕过了格式化子系统,并且不接受Format-xxx的输出

posted @ 2022-05-23 10:53  Chinor  阅读(636)  评论(0编辑  收藏  举报