如何将成员添加到现有的 PowerShell 对象?

How to add a member to an existing PowerShell object?

以下 powershell 获取计算机系统信息的对象:

> $o = Get-WmiObject -Class Win32_ComputerSystem -ComputerName .
> $o

# output

# Domain              : somedomain.com
# Manufacturer        : VMware, Inc.
# Model               : VMware Virtual Platform
# Name                : MYSERVER
# PrimaryOwnerName    : Windows User
# TotalPhysicalMemory : 17179332608

我给对象$o添加了一个新成员TotalPhysicalMemoryGB,如下:

> $o = Add-Member -Input $o @{TotalPhysicalMemoryGB=([math]::round($t.TotalPhysicalMemory / 1GB))} -PassThru

这似乎有效,因为我可以访问该成员:

> $o.TotalPhysicalMemoryGB

# output
# 16

但是,当我再次打印整个对象时,成员TotalPhysicalMemoryGB并没有出现在成员列表中:

> $o

# output

# Domain              : somedomain.com
# Manufacturer        : VMware, Inc.
# Model               : VMware Virtual Platform
# Name                : MYSERVER
# PrimaryOwnerName    : Windows User
# TotalPhysicalMemory : 17179332608

我做错了什么?如何在打印 $o 时包含新成员?

不要打印整个对象,只需将它输出到控制台即可。有一个 预定义视图 指定打印 System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem 的哪些属性。

您可以使用 Format-List cmdlet 获取所有属性的完整列表:

$o | Format-List *

现在您会找到您之前添加的属性。

作为解决方法,您还可以使用 Select-Object cmdlet 手动 select 您想要输出的属性:

$o | Select-Object Domain, Manufacturer, Model, Name, PrimaryOwnerName, TotalPhysicalMemory, TotalPhysicalMemoryGB