当前位置: 首页 > 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.xdnf.cn/news/1307305.html

相关文章:

  • System V通信机制
  • Docker之安装部署——(1)配置国内docker镜像源
  • 【Twincat3】IO的SCAN 不可选中,SCAN中后扫描不到设备
  • 代码随想录二刷之“字符串”~GO
  • 嵌入式开发学习———Linux环境下网络编程学习(二)
  • 科普:Pygame 中,`pg.Surface` v.s. `screen`
  • 电工的基础知识以及仪器的使用
  • 浏览器面试题及详细答案 88道(45-55)
  • 吉他和弦学习:从音程基石到流畅弹奏
  • 机器学习——PCA(主成分分析)降维
  • MySQL快速恢复数据的N种方案完全教程
  • JavaWeb开发_Day12
  • 云原生俱乐部-杂谈2
  • UI-TARS-Desktop 深度解析:下一代智能自动化桌面平台
  • 数据处理与统计分析 —— numpy入门
  • 《Attention-driven GUI Grounding》论文精读笔记
  • 【Spring Cloud 微服务】1.Hystrix断路器
  • 【LeetCode 热题 100】55. 跳跃游戏
  • @mcp.tool如何从函数定义映射到llm系统输入
  • 如何回答研究过MQ的源码吗
  • 【121页PPT】智慧方案智慧综合体智能化设计方案(附下载方式)
  • [优选算法专题二滑动窗口——长度最小的子数组]
  • Effective C++ 条款42:了解 typename 的双重含义
  • AutoSar AP平台中EM,CM,SM,PHM,LT等AP基础软件都有宿主进程吗
  • Lecture 10: Concurrency 3
  • linux-数据链路层
  • C语言笔记6:C高级 part1
  • 【160页PPT】机械行业数字化生产供应链产品解决方案(附下载方式)
  • 深入理解Transformer:从训练机制到长文本处理的核心问题
  • GoLand深度解析:智能开发利器与cpolar内网穿透的协同革命