为什么WMI通过搜索而不是直接进行?

问题描述 投票:0回答:3

这两个中的第一个锁定BitLocker驱动器。第二个qazxsw poi抛出:'无效的对象路径'。为什么?他们似乎相当。

InvokeMethod
c# .net windows wmi
3个回答
0
投票

看来你不是在调用//Using a search: ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "SELECT * FROM Win32_EncryptableVolume WHERE DriveLetter = 'E:'"); foreach (ManagementObject classInstance1 in searcher.Get()) classInstance1.InvokeMethod("Lock", new object[] { true }); //Direct: ManagementObject classInstance2 = new ManagementObject("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume.DriveLetter='E:'", null); classInstance2.InvokeMethod("Lock", new object[] { 0 });//throws: 'Invalid object path'. 方法。试试这个:

Get()

查看此文档:ManagementObject classInstance2 = new ManagementObject("root\\CIMV2\\Security\\MicrosoftVolumeEncryption", "Win32_EncryptableVolume.DriveLetter='E:'", null); classInstance2.Get(); classInstance2.InvokeMethod("Lock", new object[] { 0 });


0
投票

遗憾的是,您无法使用非关键属性的属性实例化对象。 WMI中的一个关键属性是具有https://docs.microsoft.com/en-us/windows/desktop/wmisdk/retrieving-an-instance的属性,WMI文档更详细地介绍了CIM_Key qualifier。有关使用带有键的完整路径引用对象的WMI要求的更多信息,您可以阅读有关Key Qualifier的WMI文档。

在C#中,对于您指定的特定类(Instance Object Paths),您只能通过使用示例中所示的Win32_EncryptableVolume来完成您要执行的操作。这是因为您尝试基于标准属性而不是键属性来获取实例。

探索WMI的一个很棒的实用工具是WMI Explorer 2.0。这为WMI类提供了很好的可视化表示。在此实用程序中,密钥属性标有星号。

ManagementObjectSearcher


-1
投票

我只是假设正确的答案类似于其他人提到但不完全正确的答案。

https://github.com/vinaypamnani/wmie2/releases提到The class's page有以下财产:

资格赛:关键

我认为,由于缺乏实际文档,通过Key搜索某些东西会返回该东西本身。通过其他方式搜索时,会返回满足该条件的对象列表。即使列表只包含1个条目 - 它不是对象本身,而是列表。

但如果有人可以提供一些文档,那就太好了。

© www.soinside.com 2019 - 2024. All rights reserved.