尝试使用路径字符串获取Win32_BIOS版本

时间:2012-04-25 17:09:21

标签: c# wmi

我正在绞尽脑汁想要怎么做。我在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名称的方法。所以我想我有点卡住了一会儿。有什么想法吗?

2 个答案:

答案 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之类的工具。

enter image description here

答案 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"];
}