【问题标题】:How to list properties of a PowerShell object excluding those starting with '_'?如何列出 PowerShell 对象的属性,不包括以“_”开头的属性?
【发布时间】:2015-05-11 11:45:30
【问题描述】:

我只想选择名称不以“__”开头的属性。 例如:

$cpu = Get-WmiObject Win32_Processor
$cpu | Get-Member -MemberType Property

返回:

__CLASS
__DERIVATION
__DYNASTY
__GENUS
__NAMESPACE
__PATH
__PROPERTY_COUNT
__RELPATH
__SERVER
__SUPERCLASS

我发现过滤掉这些的唯一方法是:

$cpu | Select-Object ($cpu | Get-Member -MemberType Property | Select-Object Name | Where-Object {$_.Name -NotMatch '^_.*$'} | ForEach-Object {$_.name})

看起来效率很低。有更快的方法吗?

【问题讨论】:

    标签: powershell properties filter wmi


    【解决方案1】:

    尝试查看 CIM cmdlet。它们暴露了相同的信息,但在大多数方面基本上都更好。这是 CIM cmdlet 的basic intro,可帮助您入门。如果您只想要属性的名称,您可以将上面的内容重写为:

    Get-CimInstance CIM_Processor | get-member -membertype Property
    

    如果您卡在 WMI 上,您可以使用:

    Get-WmiObject Win32_Processor | get-member -membertype Property `
    | Where-Object {$_.Name -notmatch '__'}
    

    【讨论】:

    • 谢谢!我不知道 CIM cmdlet。我会阅读更多关于它们的信息。
    【解决方案2】:

    一个选项:

    $cpu = Get-WmiObject Win32_Processor |选择 [a-z]*

    【讨论】:

    • select 是如何解析的?仅仅作为一个简单的比赛?它看起来更像是一个我虽然 select 没有做的正则表达式。方便,但我从未见过语法。
    • 这是通配符匹配。我相信 [a-z] 范围匹配是在 V3 中添加的。
    【解决方案3】:

    我创建了这个适用于 WMI 和 CIM 对象的小命令

    https://gist.github.com/brendanmeyer/59a4c45736aa9f52f8aa88c49820e7f9

    Get-WmiObject Win32_Processor | Select-WMICIMProperties
    Get-CimInstance Win32_Processor | Select-WMICIMProperties
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 2011-03-15
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多