在 PowerShell 中,为什么 WMI 会查询 returns 个不需要的字段?
In PowerShell, why does WMI query returns unwanted fields?
我正在 powershell ISE 中编写一个简单的 WMI 查询。我只想得到两个字段,但我得到更多
Get-WmiObject -Query "select DisplayName, State from Win32_Service"
我得到的是结果列表,每个结果都有下一个字段,
__GENUS : 2
__CLASS : Win32_Service
__SUPERCLASS :
__DYNASTY :
__RELPATH :
__PROPERTY_COUNT : 2
__DERIVATION : {}
__SERVER :
__NAMESPACE :
__PATH :
DisplayName : Windows Font Cache Service
State : Running
我注意到所有字段都以双下划线开头,不确定它是否意味着什么。我知道
可以获得更好的结果
Get-WmiObject -Class Win32_Service | Select-Object DisplayName, State
但是,我想在此查询中添加一个 where
子句,因此我尝试使用 -Query
选项。
我读到使用 linq like .where() 方法比使用 Where-Object 快得多。
这对我有用。不确定您还需要什么。
(Get-WmiObject -Query "select DisplayName, State from Win32_Service").Where( {$_.State -eq 'Stopped'}) | select Displayname, State
或者
您需要先使用基于 WMI 的查询进行筛选。
Get-WmiObject -Query "select DisplayName, State from Win32_Service where State ='Stopped'" | select Displayname, State
这些字段是内部 WMI 元数据的一部分。您无法阻止遗留 WMI cmdlet 返回它们,但您显然可以使用 Select-Object
创建没有它们的副本,或使用 Format-Table
等仅显示您想要查看的内容。
无论如何,'CIM' cmdlet 现在是首选。所以在你的情况下,你应该改用这个命令:
Get-CimInstance -Query "select DisplayName, State from Win32_Service"
在此处获取更多信息:
我正在 powershell ISE 中编写一个简单的 WMI 查询。我只想得到两个字段,但我得到更多
Get-WmiObject -Query "select DisplayName, State from Win32_Service"
我得到的是结果列表,每个结果都有下一个字段,
__GENUS : 2 __CLASS : Win32_Service __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 2 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : DisplayName : Windows Font Cache Service State : Running
我注意到所有字段都以双下划线开头,不确定它是否意味着什么。我知道
可以获得更好的结果Get-WmiObject -Class Win32_Service | Select-Object DisplayName, State
但是,我想在此查询中添加一个 where
子句,因此我尝试使用 -Query
选项。
我读到使用 linq like .where() 方法比使用 Where-Object 快得多。 这对我有用。不确定您还需要什么。
(Get-WmiObject -Query "select DisplayName, State from Win32_Service").Where( {$_.State -eq 'Stopped'}) | select Displayname, State
或者 您需要先使用基于 WMI 的查询进行筛选。
Get-WmiObject -Query "select DisplayName, State from Win32_Service where State ='Stopped'" | select Displayname, State
这些字段是内部 WMI 元数据的一部分。您无法阻止遗留 WMI cmdlet 返回它们,但您显然可以使用 Select-Object
创建没有它们的副本,或使用 Format-Table
等仅显示您想要查看的内容。
无论如何,'CIM' cmdlet 现在是首选。所以在你的情况下,你应该改用这个命令:
Get-CimInstance -Query "select DisplayName, State from Win32_Service"
在此处获取更多信息: