2015-04-23 42 views
4

我正在使用新的Microsoft.Management.Infrastructure类来处理WMI,但我遇到了一个绊脚石,并且无法找到任何有关如何使用这些类来解决此问题的信息,而无需不得不退回到使用System.Management.ManagementObjectMicrosoft.Management.Infrastructure命名空间 - Cim类

基本上,Microsoft.Management.Infrastructure不公开任何对象的方法,这是我遇到的困难。

我检索的CimClass对象,姑且称之为Win32_Process,叫物业.CimClassProperties["Handle"]得到Handle财产和.Qualifiers检索合格者为Handle财产清单。

在这个阶段,我想删除其中一个限定符,但没有暴露的方法允许这样的事情。

使用Microsoft.Management.ManagementObject命名空间,我能得到一个ManagementClass对象,再次Win32_Process为参数的缘故,叫.Properties["Handle"].Qualifiers.Remove(<qualifierName>)去除预选赛,但不知道如何做到这一点使用新的类,有没有信息在那里,我可以找到。

编辑:我做了一些挖掘和发现,调用方法对CIM对象可以使用CimSession类,即使用CimSession.InvokeMethodCimSession.InvokeMethodAsync方法,并能够使用它来调用CimClass的方法和一个CimInstance ,但似乎无法调用这两者之外的任何对象的方法,从我所能看到的方面来看。这是我吗?

回答

0

我相信,不可能修改限定符。原因是它是只读属性。另外,如果你想在代码中做某些事情,他们会将数据放入列表或字符串数​​组中并对其进行处理。

enter image description here

+0

如前所述,如果使用'System.Management.ManagementObject'这是可行的。 – JohnUbuntu

+0

我想当类本身没有公开写函数时,它怎么可能使用API​​?我在这里有点困惑。 – atp9

+0

由于*每个* WMI对象都可以创建和删除,因此这些不必由WMI类公开,它们由父类继承。当你创建自己的WMI类时,你也不会创建一个创建方法,但你可以创建该类的实例... – JohnUbuntu

0

这是一个非常晚的答案,但我发现自己在一个类似的情况,试图改变Win32_TCPIPPrinterPort打印机的IP地址和名称,这也是只读的。我遇到了一些涉及wbemtest.exe的文章。此实用程序可用于进行这种更改,但请谨慎使用,因为它是WMI对象编辑器,可能会破坏您的系统。这个链接将更好地解释它https://blogs.technet.microsoft.com/heyscriptingguy/2009/08/04/hey-scripting-guy-how-do-i-use-wmi-with-windows-powershell-to-return-information-about-properties/