我想从WMI命名空间的顶部开始,recursion遍历所有对象,然后recursion遍历每个对象的属性列表,过滤掉并返回仅控制名称中包含mem的属性。
这是我迄今为止:
gwmi -namespace "root\cimv2" -list |???? |get-Member -MemberType property | Where-Object { $_.name -match 'mem'}
注意大| 在那里的中间。 如果我删除,命令似乎运行,但未能find我知道应该find的属性。 为什么? 我认为这是因为我从以下两个命令得到不同的输出:
gwmi "Win32_operatingSystem" |get-Member -MemberType property (73 lines of output) gwmi -namespace "root\cimv2" -list |where-object { $_.Name -eq 'Win32_OperatingSystem' } |get-Member -MemberType property (10 lines of output)
我想要的是recursion地连接这个过程的单线程:
gwmi -namespace "root\cimv2" -list (manual selection of a WMI class from the list of 1000+ which appear) gwmi "win32_OperatingSystem" | get-Member -MemberType property | Where-Object { $_.Definition -match 'mem' }
谢谢,如果给出了一个有效的答案,我会接受并赞扬它(当人们从不这样做的时候会很烦恼,不是吗?)。
附注2009/11/14补充:我还没有答复,因为还没有人提供解决问题的单线程。
我认为这将做你正在寻找的一行。 CIMV2命名空间在默认情况下是存在的,但是如果你想select一个不同的命名空间,你可以使用gwmi -namesapce。
“诀窍”是将一个“对象”嵌套在“对象”的对象中
gwmi -list | % {$_.Properties | ? {$_.Name.Contains('Memory')}} | select Origin,Name
看起来像这样:
gwmi -namespace“root \ cimv2”-list
返回一个ManagementClass .Net对象数组,因此您可以使用ManagementClass.Properties集合来select名称中包含特定string的属性。 这是我的PowerShell脚本:
foreach($class in gwmi -namespace "root\cimv2" -list) { foreach($property in $class.Properties) { if($property.Name.Contains('Memory')) { $class.Name + ' --- ' + $property.Name } } }
正如你所看到的,我是一个PowerShell初学者,但是我认为你可以从中做一个“一行”。
我想通过列出你获得WMI CLASS对象的命名空间,而不是实际的对象实例 – 你通过gwmi获得“win32_OperatingSystem”如果你使用gm,你会看到:
TypeName:System.Management。 ManagementClass #ROOT \ cimv2 \ Win32_OperatingSystem VS TypeName:System.Management。 ManagementObject #root \ cimv2 \ Win32_OperatingSystem
编辑:你可以做这样的事情:
gwmi -namespace "root\cimv2" -list | %{ gwmi -class $_.name.tostring()}
如果你想要所有的属性与MEM *那么你可以尝试| select-object "mem*" | select-object "mem*"
但我不确定这是否真的是你想要的。 我认为这是非常无效的,如果你只需要知道内存的数量。 你真的想要输出什么?
这里有点晚了,但我很确定下面会让你到你想要得到的地方 – 这是WMI命名空间中所有具有“mem”名称的属性的列表
foreach ($i in gwmi -namespace "root\cimv2" -list ){$i.properties | where-object {$_.name -match 'mem'}| format-table origin,name}
下载Microsoft的Scriptomatic2和PowershellScriptomatic。 他们都是hta应用程序,所以你可以查看他们作为纯文本,看看他们是如何做到这一点。