我正在绞尽脑汁想要怎么做。我在2个月前找到了一个链接,展示了如何从wmi调用中获取单个元素。
class Sample
{
public static int Main(string[] args)
{
ManagementObject o =
new ManagementObject("Win32_Service.Name='Alerter'");
//or with a full path :
ManagementObject mObj =
new ManagementObject(
"\\\\MyServer\\root\\MyApp:MyClass.Key='abc'");
return 0;
}
}
我认为这很棒,因为它比通过WMI完全搜索获得1个属性更快地返回结果。我摆弄它并得到这个代码与Win32_ComputerSystem一起工作,我想我甚至可以使用Win32_DiskDrive和BaseBoard,但我不记得我的头脑,因为我找不到那个特定的代码。所以现在我试图让它与Win32_BIOS一起工作并继续罢工。我似乎无法找到“key”属性,因此它将返回有效的结果。
我尝试过以下路径无济于事。
\\.\root\cimv2:Win32_BIOS.SoftwareElementState=3
\\.\root\cimv2:Win32_BIOS.TargetOperatingSystem=0
\\.\root\cimv2:Win32_BIOS.SoftwareElementState=3,TargetOperatingSystem=0
我在Win32_BIOS类中找到的2个键是名称和版本..但版本是我需要的。因为我试图在不同的计算机上得到它,我不能只是硬编码名称,并找不到另一种获取BIOS名称的方法。所以我想我有点卡住了一会儿。有什么想法吗?
答案 0 :(得分:3)
您要查找的WMI对象路径由Name,SoftwareElementID,SoftwareElementState,TargetOperatingSystem和Version属性组成。
看起来像这样
Win32_BIOS.Name="Ver 1.00 BIOS A05 PARTTBL",SoftwareElementID="Ver 1.00 BIOS A05 PARTTBL",SoftwareElementState=3,TargetOperatingSystem=0,Version="DELL - 6040000"
如果您想知道特定实例的对象路径,您可以使用Wmi delphi code creator之类的工具。
答案 1 :(得分:0)
我们使用WMI来枚举LAN上的网络接口信息。这是一套精简的代码,可以满足您的需求。您可以看到替换计算机名称很容易。此外,如果您通过LAN查询到不同的计算机,您将需要提供凭据 ConnectionOptions对象。
String path = @"\\{0}\ROOT\CIMV2";
String BiosVersion = String.Empty;
ConnectionOptions co = new ConnectionOptions();
ManagementScope scope =
new ManagementScope(String.Format(path, "."), co);
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_BIOS");
ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection moc = search.Get();
foreach (ManagementObject mo in moc)
{
BiosVersion = (String)mo["SMBIOSBIOSVersion"];
}