我正在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
选项。
答案 0 :(得分:2)
这些字段是内部WMI元数据的一部分。您无法阻止旧版WMI cmdlet返回它们,但是显然您可以使用Select-Object
创建一个没有它们的副本,或者使用Format-Table
等仅显示您想要查看的内容。
无论如何,现在首选使用“ CIM” cmdlet。因此,在您的情况下,应改为使用以下命令:
Get-CimInstance -Query "select DisplayName, State from Win32_Service"
在此处获取更多信息:
答案 1 :(得分:0)
我已经读到,使用linq这样的.where()方法比使用Where-Object快得多。 这对我有用。不知道您在寻找什么。
resultHash = {
'project' => 'AAA',
'Division' => 'BBB',
'TestingType' => 'CCC',
'Email' => ['abc@gmail.com', 'def@gmail.com', 'efg@gmail.com']
}
或 您将需要首先使用基于WMI的查询进行过滤。
(Get-WmiObject -Query "select DisplayName, State from Win32_Service").Where( {$_.State -eq 'Stopped'}) | select Displayname, State