如何在PowerShell 7中全局设置Format-Table输出全部左对齐?
PowerShell 7全局设置Format-Table默认左对齐(针对PsCustomObject)
需求说明
需要在当前PowerShell会话内全局生效的设置,让Format-Table输出所有内容默认左对齐。拒绝临时使用带Alignment键的计算属性、将所有值转为字符串这类繁琐方法。日常主要使用PsCustomObject,示例场景如下:
示例代码
[PsCustomObject] @{ "字符串属性" = "示例内容" "数值属性" = 1 } | Format-Table
默认输出(数值右对齐)
字符串属性 数值属性 ---------- ---------- 示例内容 1
期望输出(全左对齐)
字符串属性 数值属性 ---------- ---------- 示例内容 1
已尝试通过官方about_Format.ps1xml文档自定义默认对象视图,但未成功。补充:对齐方式混乱会大幅降低可读性,比如以下示例:
虚拟化主机名 客户机操作系统主机名 处理器数量 内存 启动设备 HyperV代系 ------------------ ---------------------------- ----------------- ------ ---------- ---------------- ex-hyp-1 exa-tes-1 1 0.91 GB File 2
解决方案
步骤1:创建自定义格式文件
新建一个名为AllLeftAlignPSCustomObject.ps1xml的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <Configuration> <ViewDefinitions> <View> <Name>PSCustomObject</Name> <ViewSelectedBy> <TypeName>System.Management.Automation.PSCustomObject</TypeName> </ViewSelectedBy> <TableControl> <AutoSize/> <TableRowEntries> <TableRowEntry> <TableColumnItems> <TableColumnItem> <ScriptBlock> foreach ($prop in $_.PSObject.Properties) { [PSCustomObject]@{ $prop.Name = $prop.Value } } </ScriptBlock> <Alignment>Left</Alignment> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> </ViewDefinitions> </Configuration>
步骤2:加载格式文件到当前会话
在PowerShell中执行以下命令,让自定义格式生效:
Update-FormatData -PrependPath .\AllLeftAlignPSCustomObject.ps1xml
步骤3:永久生效(可选)
如果希望每次启动PowerShell都自动加载该设置,将上述Update-FormatData命令添加到PowerShell配置文件中:
- 打开配置文件:
notepad $PROFILE.CurrentUserAllHosts
- 添加一行(替换为实际文件路径):
Update-FormatData -PrependPath "C:\实际路径\AllLeftAlignPSCustomObject.ps1xml"
验证效果
执行之前的示例代码,输出会变为全左对齐,符合预期。
内容的提问来源于stack exchange,提问作者Bren0man
相关产品推荐
相关产品推荐

