计算属性是什么
计算属性是给对象临时算出新的一列:用哈希表写清列名与计算表达式,表达式里用当前对象占位符去取原始属性。它的用处有两个——把原始数据换算成人类看得懂的单位(字节换成兆字节、秒换成小时),以及把多个字段拼成一句可读的说明。因为它不修改原始对象,只影响输出与导出,所以非常适合放在报表的最后一步,也常与排序组合做出资源占用排行。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Select-Object @{ Name = '列名'; Expression = { 表达式 }} |
| 简写键名 | Name 可简写为 n,Expression 可简写为 e,脚本里常用简写 |
| 常用场景 | 单位换算、字段拼接、条件分类、取子属性 |
| 与普通列混用 | 可与直接书写属性名混在同一次投影里 |
| 导出保留 | 计算结果会随对象一起导出,CSV 里保留的是算好的值 |
典型使用场景
- 把字节换算成兆字节或吉字节,让容量一眼看出量级
- 把日期时间格式化成统一写法,便于报表展示与比对
- 把两个字段拼成标签,例如主机名加进程名
- 用条件表达式把数值映射成结论文字,如达标与超标
- 从嵌套属性里取出需要的那一层,避免输出整块内容
- 与排序组合,生成资源占用的排行榜
常用示例
常用示例
# 字节换算成 MB,保留两位小数
Get-ChildItem C:\Logs -File | Select-Object Name, @{n='MB';e={[math]::Round($_.Length/1MB,2)}}
# 资源排行:先排序再取头部
Get-Process | Sort-Object WS -Descending | Select-Object -First 5 @{n='进程';e={$_.ProcessName}}, @{n='内存MB';e={[math]::Round($_.WS/1MB)}}
# 拼接字段成标签
Get-Service | Select-Object @{n='标签';e={$_.Name + ' | ' + $_.Status}}
# 条件分类
Get-ChildItem D:\Data -File | Select-Object Name, @{n='大小档';e={ if ($_.Length -gt 100MB) { '大' } else { '普通' } }}
# 取子属性
Get-Process | Select-Object Name, @{n='路径';e={$_.Path}}哈希表键说明
| 键 | 含义 | 说明 |
|---|---|---|
| Name 或 n | 新列显示的名称 | 建议用简洁明确的词,便于导出后识别 |
| Expression 或 e | 计算表达式 | 必须写在花括号里,并用当前对象占位符取值 |
| FormatString | 格式化字符串 | 与表达式共用时按格式渲染 |
| Alignment | 列对齐方式 | 仅影响显示,不影响数据 |
表达式里必须用当前对象占位符引用属性,漏写会让表达式变成常量,输出一列一模一样的值。写完先用少量数据验证,再上大批量。
中文列名在导出后跨系统传递可能乱码,做系统间数据交换时建议保留英文列名;只在本地报表里用中文。