格式化用于覆盖默认值并为命令创建自定义的输出格式
默认格式
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
的输出