pscustomobject是powershell中创建结构化对象的核心方式,支持哈希表直接转换、属性点取访问、管道兼容(如format-table/export-csv),推荐用json持久化;v3.0+引入,比new-object更简洁高效。
在 powershell 基础中创建和操作自定义对象,核心是理解“一切皆对象”——哈希表不是对象,但 [pscustomobject] 是。它轻量、易读、兼容管道命令(如 format-table、export-csv),是脚本中最常用的方式。
用哈希表快速创建 PSCustomObject
PowerShell v3.0+ 支持最简洁的语法:
$user = [pscustomobject]@{ Name = 'Alice'; Age = 32; City = 'Seattle' }- 属性名不用引号(除非含空格或特殊字符),值支持变量、表达式甚至其他对象
- 创建后可直接点取属性:
$user.Name返回Alice,$user | Get-Member显示其为PSCustomObject类型
把已有哈希表转成对象(注意顺序)
若你已有一个哈希表(比如从配置读取),可直接强制转换:
$ht = @{ Title = 'Admin'; Level = 'Senior'; Active = $true }$obj = [pscustomobject]$ht- ⚠️ 注意:普通哈希表不保证键顺序;如需严格按定义顺序输出(例如导出 CSV 时列序固定),应改用
[ordered]@{...},再转为[pscustomobject]
用 Select-Object 从现有对象派生新对象
这是处理命令输出的常用技巧,适合筛选、重命名或添加计算字段:
Get-Process | Select-Object Name, Id, @{Name='MemMB';Expression={$_.WS / 1MB -as [int]}}-
@{Name='...';Expression={...}}是计算属性语法,可做单位换算、字符串拼接、条件判断等 - 结果仍是
PSCustomObject,可继续管道传递或导出
保存和重新加载对象(推荐 JSON)
想持久化对象?JSON 是跨平台、易读、无安全风险的首选:
- 保存:
$user | ConvertTo-Json -Depth 1 | Set-Content user.json - 读取:
$user = Get-Content user.json | ConvertFrom-Json - 对比
Export-Clixml:JSON 不加密、不绑定 Windows、无方法丢失问题,适合配置数据;而Clixml适合临时序列化凭据或复杂 .NET 对象(仅限 Windows)











