如何列出PowerShell对象的属性,不包括那些以' _'?开头的对象

时间:2015-03-10 05:46:33

标签: powershell properties filter wmi

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

$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})

看起来非常低效。有更快的方法吗?

2 个答案:

答案 0 :(得分:0)

请尝试查看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 '__'}

答案 1 :(得分:0)

一个选项:

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