通过WMI .NET C#

时间:2019-02-11 12:06:36

标签: c# .net wmi

因此,我已使用此代码获取S.M.A.R.T. Windows WMI中的硬盘驱动器诊断信息:

http://vasters.com/archive/Reading-ATAPI-SMART-Data-From-Drives-Using-NET-Temperature-Anyone.html

它可以在大多数计算机上使用,而不能在其他计算机上使用。经过一些研究和样本测试,我发现它不适用于硬盘驱动器通过PCI Express而不是SATA连接的计算机。

var searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
    foreach (ManagementObject queryObj in searcher.Get())
    {
          //do stuff
    }

这是我得到异常的地方:

System.Management.ManagementException:'不支持'

还有其他方法可以执行此操作,或者在此代码中添加一些内容以使其正常工作吗?

1 个答案:

答案 0 :(得分:0)

我到处搜索了此代码,找不到适合我的代码,但最终在另一个论坛上找到了它,因此使用起来真的很简单。 只是从我的示例中获得WMI信息的另一种方法。您可以在Microsoft DOC中找到WMI Win32_DiskDrive的更多属性 https://github.com/Mityugin/greentest

string NamespacePath = "\\\\.\\ROOT\\cimv2";
string ClassName = "Win32_DiskDrive";
oClass = new ManagementClass(NamespacePath + ":" + ClassName);
            foreach (ManagementObject oObject in oClass.GetInstances())
            {
                var sign = Convert.ToString(oObject["Signature"]);
                var model = Convert.ToString(oObject["Model"]);
                var status = Convert.ToString(oObject["Status"]);

                if (Equals(sign,""))
                {
                    TextBox1.AppendText("DISK model: " + model);
                    TextBox1.AppendText(Environment.NewLine);
                    TextBox1.AppendText("Status: " + status);
                    TextBox1.AppendText(Environment.NewLine);

                    if (!status.Equals("OK") || !model.Contains("SSD"))
                    {
                        //Here is info if Disk is not OK or model not SSD
                    }
                }


            }