如何将成员添加到现有的 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
以下 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