如何使用 C#/.NET 根据磁盘获取 ATAPI SMART 数据

Posted

技术标签:

【中文标题】如何使用 C#/.NET 根据磁盘获取 ATAPI SMART 数据【英文标题】:How to get ATAPI SMART Data according to disks using C#/.NET 【发布时间】:2018-01-22 16:46:18 【问题描述】:

我想编写一个应用程序来监控系统中一个或多个磁盘的状态。

我发现我可以通过 WMI "root/wmi" 和 MSStorageDriver 管理一个磁盘,并在这些磁盘中查询实际值(数据和阈值),如下链接 - http://wutils.com/wmi/root/wmi/msstoragedriver_atapismartdata/ 到目前为止,它运行良好:-)

但是,直到现在我还没有管理多个磁盘。我不知道如何根据磁盘获取SMART数据

谁能帮我解决这个问题?

非常感谢, 铨

【问题讨论】:

【参考方案1】:

我尝试并成功了,我想分享这个问题的答案

获取 PNPDeviceID 相应地获取 PNPDevice 的 InstanceName 从 InstanceName 获取 S.M.A.R.T 数据

示例代码

public string   PNPDeviceID
    
        set
        
            this.m_PNPDeviceID = value;
            this.InstanceName = null;
            this.QueryObjATAPISmartData = null;

            SearcherPnPDeviceId = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPDeviceId");
            foreach (ManagementObject queryObj in SearcherPnPDeviceId.Get())
            
                if (queryObj["PNPDeviceID"] != null)
                
                    if (this.PNPDeviceID.ToUpper() == queryObj.GetPropertyValue("PNPDeviceID").ToString().ToUpper())
                    
                        if (queryObj["InstanceName"] != null)
                        
                            this.InstanceName = queryObj["InstanceName"].ToString();
                            break;
                        
                    
                
            

            if (this.InstanceName != null)
            

                SearcherATAPISmartData = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData");
                foreach (ManagementObject queryObj in SearcherATAPISmartData.Get())
                
                    if (queryObj["InstanceName"] != null)
                    
                        if (this.InstanceName.ToUpper() != queryObj.GetPropertyValue("InstanceName").ToString().ToUpper())
                        
                            continue;
                        
                    
                    this.QueryObjATAPISmartData  = queryObj;
                    break;
                  
      

之后,您可以获取 QueryObjATAPISmartData 的任何属性

问候, 铨

【讨论】:

以上是关于如何使用 C#/.NET 根据磁盘获取 ATAPI SMART 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何获取目录C ++的磁盘大小

smartctl----硬盘状态监控

如何将 MJPEG 流保存到磁盘(C# .NET)?

如何使用 C# ASP.Net 从 XML 文档中获取特定 XML 元素的列表?

java 如何获得磁盘名称

我使用 .net core webapi 怎么获取图片并存到本地磁盘去