当前位置: 首页 > news >正文

PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板

文章目录

  • PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板
    • 1. 计算列(Calculated Property):自定义任何一列
      • 1.1 示例:显示 VM(MB)并保留两位小数、右对齐
      • 1.2 示例:自定义列头并复合表达式
    • 2. 列宽与对齐(只对 `Format-Table`)
    • 3. 分组与换行:`-GroupBy`、`-Wrap`
    • 4. Format right 的“报表模板”
      • 4.1 屏幕友好模板(表格)
      • 4.2 导出纯文本表格(文件)
      • 4.3 导出 HTML 报表(注意不要提前 `Format-*`)
      • 4.4 GridView 交互(Win 环境)
    • 5. 常见故障排查清单(实战非常好用)
    • 6. 进阶:`FormatString` 玩转数字/日期
    • 7. 10 题自测(带参考答案)
    • 8. 实用场景模板合集(拿去即用)
      • 8.1 进程资源 Top 报表(屏幕版)
      • 8.2 服务健康快照(HTML 版)
      • 8.3 目录清单(宽列表)
    • 9. 一页纸总结(收藏级)

PowerShell 格式化系统完全掌握(下):自定义列/格式字符串/对齐与宽度 + 实战模板

本篇定位:在上篇“原理与基础用法”的基础上,带你玩转计算列、格式字符串、对齐/宽度、分组与换行,并给出可直接复用的报表与导出模板。


1. 计算列(Calculated Property):自定义任何一列

语法(Format-Table / Format-List 通用):

@{Name = '列头显示名'   # 别名:N、Label、LExpression = { 脚本块 } # 别名:E# 还可加:FormatString / Width / Alignment(仅 Format-Table 接收)
}

1.1 示例:显示 VM(MB)并保留两位小数、右对齐

Get-Process |Format-Table Name,@{n='VM (MB)'; e={$_.VM/1MB}; FormatString='F2'; Alignment='Right'} -AutoSize

1.2 示例:自定义列头并复合表达式

Get-Service |Format-Table @{n='ServiceName';e={$_.Name}}, Status, DisplayName -AutoSize

小技巧:/1MB/1GB 这类写法简单直观,常用于把字节转换为人类可读单位。


2. 列宽与对齐(只对 Format-Table

Get-Process |Format-Table @{n='Name'; e={$_.Name}; Width=30; Alignment='Left'},@{n='Id';   e={$_.Id};   Width=8;  Alignment='Right'} -AutoSize

注:-AutoSize 会基于数据动态计算宽度;你也可以同时指定固定宽度覆盖默认。导出到文件时记得 Out-File -Width 200,避免换行难看。


3. 分组与换行:-GroupBy-Wrap

  • -GroupBy <Prop>:按属性分组(记得先 Sort-Object 保证分组有序)。
  • -Wrap:长文本换行显示(例如 DisplayName 很长时)。
Get-Service |Sort-Object Status, Name |Format-Table -GroupBy Status Name, Status, DisplayName -Wrap -AutoSize

4. Format right 的“报表模板”

4.1 屏幕友好模板(表格)

# 屏幕展示:紧凑 + 可读
Get-Process |Select-Object Name, Id, VM, WorkingSet |Sort-Object VM -Descending |Format-Table @{n='Name';e={$_.Name};Width=28},@{n='Id';e={$_.Id};Width=6;Alignment='Right'},@{n='VM(MB)';e={$_.VM/1MB};FormatString='F1';Alignment='Right'},@{n='WS(MB)';e={$_.WorkingSet/1MB};FormatString='F1';Alignment='Right'} -AutoSize

4.2 导出纯文本表格(文件)

Get-EventLog -List |Select-Object LogDisplayName, MinimumRetentionDays |Sort-Object LogDisplayName |Format-Table @{n='LogName';e={$_.LogDisplayName};Width=40},@{n='RetDays';e={$_.MinimumRetentionDays};Alignment='Right'} |Out-File .\EventLogs.txt -Width 200

4.3 导出 HTML 报表(注意不要提前 Format-*

Get-Service |Select-Object Name, DisplayName, Status |Sort-Object Status, Name |ConvertTo-Html -Title 'Service Report' -PreContent "<h2>Service Report</h2>" |Out-File .\ServiceReport.html

记住:ConvertTo-Html 要吃“对象”,不是“格式化指令”。所以不要把 Format-Table 放在它前面。

4.4 GridView 交互(Win 环境)

Get-Process |Select-Object Name, Id, CPU, VM, WS |Out-GridView -Title 'Process Explorer'

5. 常见故障排查清单(实战非常好用)

  1. 导出 HTML/CSV 内容怪异?

    • 检查是否在 ConvertTo-Html/Export-Csv 之前用了 Format-*
    • 正解:先选择属性(Select-Object),再导出
  2. Out-GridView 无法显示?

    • 检查是否喂了 Format-* 之后的内容。
    • 正解:直接把对象传给 Out-GridView
  3. 表格对齐/换行丑?

    • -AutoSize-Wrap、自定义 Width/Alignment 组合使用。
    • 导文件加 Out-File -Width N
  4. 混入了多种对象类型导致格式混乱?

    • 拆开执行或统一投射成相同结构(Select-Object 统一属性集合)。
  5. 列头不是属性名(例如 PM (K))看不懂?

    • Get-Member 查真实属性;列头只是显示名

6. 进阶:FormatString 玩转数字/日期

FormatString 支持 .NET 标准/自定义格式:

Get-Process |Format-Table Name,@{n='CPU(s)'; e={$_.CPU};     FormatString='F2'; Alignment='Right'},@{n='StartTime'; e={$_.StartTime}; FormatString='yyyy-MM-dd HH:mm'} -AutoSize

小贴士:有些属性(如 StartTime)可能需要管理员权限或存在空值,注意容错:e={ $_.StartTime -as [datetime] }


7. 10 题自测(带参考答案)

1)“Format 命令应该放在管道哪里?”

最右侧(或仅在 Out-File/Out-Printer 之前)。

2)Out-GridView 能否接 Format-Table 的输出?

不能。它只接受原始对象

3)为什么 Get-Process 会显示那几列?

有预定义视图(.format.ps1xml)决定了默认列与列头。

4)没有预定义视图时怎么决定显示哪些列?

Types.ps1xmlDefaultDisplayPropertySet,没有就考虑所有属性。

5)什么时候显示表格,什么时候显示列表?

≤4 列用表格;≥5 列用列表(为了可读性)。

6)如何把字节转换成人类可读单位?

/1KB/1MB/1GB 等。

7)如何按状态分组显示服务?

Sort-Object Status + Format-Table -GroupBy Status

8)导出到文件时表格被换行了怎么办?

Out-File -Width 200(或更大)。

9)为何 PM (K) 找不到对应属性?

这是列头显示名,真实属性请用 Get-Member 查看(如 PM)。

10)如何创建“保留两位小数并右对齐”的计算列?

@{n='X'; e={...}; FormatString='F2'; Alignment='Right'}


8. 实用场景模板合集(拿去即用)

8.1 进程资源 Top 报表(屏幕版)

Get-Process |Select-Object Name, Id, CPU, VM, WS |Sort-Object CPU -Descending |Format-Table @{n='Name';e={$_.Name};Width=25},@{n='Id';e={$_.Id};Width=6;Alignment='Right'},@{n='CPU(s)';e={$_.CPU};FormatString='F2';Alignment='Right'},@{n='VM(MB)';e={$_.VM/1MB};FormatString='F1';Alignment='Right'},@{n='WS(MB)';e={$_.WS/1MB};FormatString='F1';Alignment='Right'} -AutoSize

8.2 服务健康快照(HTML 版)

$services = Get-Service |Select-Object Name, DisplayName, Status |Sort-Object Status, Name$services |ConvertTo-Html -Title 'Service Health' `-PreContent "<h2>Service Health Snapshot</h2><p>$(Get-Date)</p>" |Out-File .\ServiceHealth.html

8.3 目录清单(宽列表)

Get-ChildItem C:\Projects -Directory | Format-Wide Name -Column 3

9. 一页纸总结(收藏级)

  • 机制:对象 → Out-Default → Out-Host → 格式化系统(视图/默认属性)→ 指令 → 渲染
  • 三板斧Format-Table(表格)、Format-List(多属性/看值)、Format-Wide(宽列表)
  • 两大坑Format right一次只喂一种对象类型
  • 与 Out*:Out-File/Out-Printer 接格式化指令;Out-GridView 只能接对象
  • 计算列@{n='列'; e={...}; FormatString='F2'; Alignment='Right'; Width=30}
  • 导出:文件加 -Width;HTML/CSV 前不要 Format-*

到这你已经把“格式化系统”的原理 + 用法 + 实战全部拿下了。
以后看到“输出不好看/导出乱/GridView 不显示”的问题,就按本文清单逐一排查,十拿九稳。

http://www.dtcms.com/a/333038.html

相关文章:

  • 抗日胜利80周年 | HTML页面
  • 智和信通全栈式运维平台落地深圳某学院,赋能运维管理提质提效
  • TCP传输层协议(4)
  • 微信实名认证组件
  • 二十四、Mybatis-基础操作-删除(预编译SQL)
  • SAP ALV导出excel 报 XML 错误的 /xl/sharedStrings.xml
  • Android协程的用法大全
  • 汽车电子:现代汽车的智能核心
  • Unity_数据持久化_Json
  • 使用原生css实现word目录样式,标题后面的...动态长度并始终在标题后方(生成点线)
  • 第七十章:告别“手写循环”噩梦!Trainer结构搭建:PyTorch Lightning让你“一键炼丹”!
  • Codeforces Deque工艺
  • 用 FreeMarker 动态构造 SQL 实现数据透视分析
  • STM32学习笔记12-串口数据包收发FlyMcuST-LINK Utility
  • Shortest Routes II(Floyd最短路)
  • 管家婆辉煌系列试用版/期限说明
  • Shader开发(十三)理解片元插值
  • 淘米自动签到脚本
  • 大气负氧离子自动监测站:解密空气的科技密码
  • 有红帽认证证书可以0元置换华为openEuler-HCIA/HCIP认证
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|13th Aug. , 2025
  • MyBatis StatementHandler核心原理详解
  • Nginx反向代理Tomcat实战指南
  • mysql-DDLy语句案例
  • 基于asp.net#C##VUE框架的独居老人物资配送系统的设计与实现#sql server#visual studio
  • OpenZeppelin Contracts 架构分层分析
  • 基于机器学习的赌博网站识别系统设计与实现
  • 【计算机视觉与深度学习实战】02基于形态学的权重自适应图像去噪系统
  • 【车联网kafka】常用参数及其命令总结(第八篇)
  • 【展厅多媒体】数字展厅小知识:实物识别桌是什么?