【发布时间】:2020-06-13 17:33:03
【问题描述】:
有两种最流行的方式:PowerShell (PowerShell.Create()...) 和 WMI (ManagementObjectSearcher)。
1) PowerShell Get-PhysicalDisk 可以正确检索磁盘,但它没有 VendorSpecific 属性 (SMART)。 Get-StorageReliabilityCounter 填充了一些常见的 SAMRT 属性,但不是全部。具体来说,它没有显示“重新分配的扇区数”和“待定扇区”
2) WMI SELECT * FROM Win32_DiskDrive 可以查询,但是这个显示的是虚拟磁盘。实际的物理磁盘不存在。对于软件 RAID(在磁盘管理中添加镜像)或存储空间,实际的物理磁盘已被过滤掉。 SELECT * FROM MSStorageDriver_FailurePredictData 显示了我正在寻找的 SMRART (VendorSpecific) 信息,但也没有物理驱动器,也无法将“InstanceName”与磁盘的实际列表相关联。
同时,第 3 方软件可以清楚地显示物理和虚拟磁盘(存储空间本身),并可以为它们显示 SMART:
在一天结束的时候,我想在 .Net 应用程序中使用它,我搜索了一些代码如何从 WMI 对象的 VendorSpecific 字段中提取此信息(重新分配的扇区计数),但我只是没有看到 WMI 对象实际的物理磁盘。
【问题讨论】:
-
这里有您要查找的代码的 .net 版本。 derekwilson.net/blog/2017/08/26/smart 。它应该让你开始。我建议你不要走那条路。这是一团糟。许多读取智能数据的程序都在后台使用 smartclt.exe。我推荐 smartclt.exe。它是命令行,您可以将输出解析到您的脚本中。
-
@Aaron,是的,谢谢,我看过这个。但是因为它只是 WMI 的一个包装器,所以它有同样的问题。不适用于软件 RAID 和 StorageSpaces。我还发现 WMI 没有显示 USB 驱动器,我需要为其他服务器使用它:(
标签: .net windows powershell wmi