我正在寻找一种可能通过powershell的方法来获得任何给定设备上硬盘驱动器的智能数据。
我已经通过CMD和powershell尝试了WMI命令,但无法获得我正在寻找的适当数据。
Get-WmiObject -list
我希望在这个列表中找到一些适合SMART或REallocated空间的东西,但是没有找到相关的东西。任何人都知道有一种方法可以从硬盘中提取智能数据,而无需使用第三方应用程序。我想自动化一个识别故障驱动器的过程,但需要传递特定的信息,而不仅仅是是或否可能失败。
发布于 2020-01-10 13:10:26
在您的问题中,您已经请求了通用的S.M.A.R.T.信息和重新分配的扇区的特定信息。我将首先通过PowerShell解决S.M.A.R.T.交互,然后给出返回与重新分配的地段相关的属性(也称为ReadErrorsCorrected属性)的示例代码。这应该允许您在需要的地方针对指定的属性和其他S.M.A.R.T.属性。
-序:
不幸的是,似乎没有一种方法可以仅通过PowerShell从各种存储设备获取所有S.M.A.R.T.信息,因为它是该功能的一个相当通用的实现,而且S.M.A.R.T.的实现因存储设备供应商而异。
话虽如此,下面描述的方法应该满足用户执行的典型S.M.A.R.T.检查的关键要求,包括预测寿命、重新分配和不可校正的扇区等,尽管使用了相当通用的PowerShell术语(例如,寿命=“磨损”)。
-信息:
通过结合使用两个PowerShell cmdlet,我们可以轻松查看存储设备提供的一些S.M.A.R.T.数据:
Get-StorageReliabilityCounter
“cmdlet获取指定磁盘或物理磁盘的存储可靠性计数器。这些计数器包括有关设备温度、错误、损耗和设备使用时间长度等信息。”
这是实际上将返回我们寻找的S.M.A.R.T.数据的cmdlet。但是,与您可能熟悉的许多其他cmdlet不同,此cmdlet需要通过PowerShell对象指向目标磁盘。(如果您是PowerShell的新手,这并不像听起来那么复杂,所以不要害怕。)
“Get- Disk cmdlet获取操作系统可见的一个或多个磁盘对象,或可选的筛选列表。”
这是我们将用来提供所需的PowerShell对象的cmdlet,以便Get-StorageReliabilityCounter知道要查询哪个磁盘。
-代码:
就像任何事情一样,有多种方法可以实际执行代码,所以在我看来,我只需要提供代码,以尽可能简单的方式获得所需的信息。
有关所有本地磁盘的简单S.M.A.R.T.信息的(以管理员身份运行):
Get-Disk | Get-StorageReliabilityCounter示例输出:
PS C:\WINDOWS\system32> Get-Disk | Get-StorageReliabilityCounter
DeviceId Temperature ReadErrorsUncorrected Wear PowerOnHours
-------- ----------- --------------------- ---- ------------
1 0 0 5505
2 0 0 572
0 0 2799所有本地磁盘上的扩展S.M.A.R.T.信息的(以管理员身份运行):
Get-Disk | Get-StorageReliabilityCounter | Select-Object -Property "*"截断样本输出:
PS C:\WINDOWS\system32> Get-Disk | Get-StorageReliabilityCounter | Select-Object -Property "*"
DeviceId : 1
FlushLatencyMax : 46
LoadUnloadCycleCount :
LoadUnloadCycleCountMax :
ManufactureDate :
PowerOnHours : 5505
ReadErrorsCorrected : 0
ReadErrorsTotal : 0
ReadErrorsUncorrected : 0
ReadLatencyMax : 231
StartStopCycleCount :
StartStopCycleCountMax :
Temperature : 27
TemperatureMax : 0
Wear : 0
WriteErrorsCorrected :
WriteErrorsTotal :
WriteErrorsUncorrected :
WriteLatencyMax : 69
PSComputerName :正如您所看到的,列出了一些可取的指标,这些指标可能会也可能不会让您规避灾难。
用于获取ReadErrorsCorrected 属性(也称为重新分配的扇区)中包含的值的(以管理员身份运行):
Get-Disk | Get-StorageReliabilityCounter | Select-Object -ExpandProperty "ReadErrorsCorrected"示例输出:
PS C:\WINDOWS\system32> Get-Disk | Get-StorageReliabilityCounter | Select-Object -ExpandProperty "ReadErrorsCorrected"
0在这一点上,一些用于检测任何重新分配的地段的脚本可以检查此值是否为0以外的值,并相应地进行报告。
- tl;dr:
跑
Get-Disk | Get-StorageReliabilityCounter或
Get-Disk | Get-StorageReliabilityCounter | Select-Object -Property "*"以管理员身份使用获取最重要的S.M.A.R.T.信息。
发布于 2017-08-17 10:00:13
Get-WmiObject `
-namespace root\wmi `
–class MSStorageDriver_FailurePredictStatus `
-ErrorAction Silentlycontinue `
| Select InstanceName, PredictFailure, Reason `
| Format-Table –Autosize发布于 2019-10-19 04:25:07
我想这就是你需要的:
Get-Disk | foreach { $_ | Get-StorageReliabilityCounter | Format-List }这将为您提供所有已连接磁盘的ReadErrorsCorrected和WriteErrorsCorrected统计信息。
我找不到微软文档的相关部分来确保我在这里是100%正确的,但根据这个文档,我假设重新分配的扇区计数是更正的读/写扇区的总数:https://kb.acronis.com/content/9105
https://stackoverflow.com/questions/58453447
复制相似问题