约 2115 字

约 11 分钟

#自定义对象

PowerShell 允许创建自定义对象,用于组合来自不同来源的数据、为数据添加说明性属性,或生成便于导出为 JSON、CSV 的结构。

#使用 [pscustomobject] 创建对象

最常见的方式是将哈希表转换为 [pscustomobject]:

> $obj = [pscustomobject]@{ Name = 'demo'; Version = 1 }
> $obj
Name Version
---- -------
demo       1

使用 [ordered] 保持属性顺序:

> $obj = [pscustomobject][ordered]@{ Name = 'demo'; Version = 1 }
  • [pscustomobject] 创建的属性类型为 NoteProperty。
  • 属性值可以是字符串、数字、数组,甚至其他对象。

#使用 New-Object 创建对象

> $obj = New-Object -TypeName psobject -Property @{ Name = 'demo'; Version = 1 }
> $obj.Name
demo

-Property 接收一个哈希表,其中的键会成为对象的属性。

#使用 Add-Member 添加成员

Add-Member 可以向已有对象添加属性或方法:

> $obj = [pscustomobject]@{ Name = 'demo' }
> $obj | Add-Member -MemberType NoteProperty -Name Version -Value 1
> $obj.Version
1
  • 默认情况下 Add-Member 不输出对象;需要继续传递时使用 -PassThru。
  • 添加同名属性时可以使用 -Force 覆盖。

#使用 Select-Object 计算属性创建对象

Select-Object 可以在投影的同时计算新属性:

> Get-Process | Select-Object -First 3 -Property ProcessName, @{ Name = 'MemMB'; Expression = { [math]::Round($_.WorkingSet64 / 1MB, 1) } }

这种方式适合从现有对象生成新的数据结构,而不需要手动逐个添加属性。

#转换为 JSON 和 CSV

自定义对象可以直接序列化:

> $obj | ConvertTo-Json
> $obj | ConvertTo-Csv -NoTypeInformation
> $obj | Export-Csv -Path ./obj.csv -NoTypeInformation

读取 JSON 或 CSV 后,也会得到具有相应属性的对象:

> Get-Content ./obj.json -Raw | ConvertFrom-Json
> Import-Csv -Path ./obj.csv

#注意事项

  • Add-Member 会修改原对象,除非先复制对象。
  • ConvertTo-Csv 返回 CSV 文本,Export-Csv 直接写入文件。
  • 导出的 CSV 可能不包含类型信息,具体取决于是否使用 -NoTypeInformation。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2