【问题标题】:How to add a member to an existing PowerShell object?如何将成员添加到现有的 PowerShell 对象?
【发布时间】:2017-01-31 10:13:20
【问题描述】:

以下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时如何获取新成员?

【问题讨论】:

    标签: powershell wmi windows-server-2012 powershell-5.0 get-wmiobject


    【解决方案1】:

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

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

    $o | Format-List *
    

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

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

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

    【讨论】:

    • 谢谢。有没有办法使用预定义的视图选择对象并只指定其他属性?即不必对默认值进行硬编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2010-11-25
    • 2019-09-25
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多