powershell: How to check if S.M.A.R.T is enabled on remote machines
Solution 1:
"When the road before you splits in two, take a third path..." ~ Telaxian Proverb
Script
This is the script I used to get the SMART data from multiple machines. I've already enabled winrm
on the devices used in this example.
$aComputers = Get-Content C:\ComputerSMARTDriveTest.txt
(Get-WmiObject -ComputerName $aComputers -namespace root\wmi –class MSStorageDriver_FailurePredictStatus -ErrorAction Silentlycontinue |
more |
Select PSComputerName,PredictFailure,Reason,InstanceName |
Format-Table –Autosize)
That will get you output like:
PSComputerName PredictFailure Reason InstanceName
-------------- -------------- ------ ------------
4CZ1***** False 0 IDE\DiskHitachi_HTS723225A7A364_________________ECBOA60W\4&35e86db3&0...
2UA0***** False 0 IDE\DiskST3160318AS_____________________________HP35____\5&5df8cfa&0&...
Script Notes:
In the text file I have one hostname listed per line. There are no comma's separating the data. Also, computers which don't have smart enabled drives won't show on the report. You can customize the report with more data options to select, just run a Select *
instead of the options I used in the script to see the full dump.
Win32_diskdrive vs MSStorageDriver_FailurePredictStatus
On the question of win32_diskdrive
vs MSStorageDriver_FailurePredictStatus
properties... The MSStorageDriver_FailurePredictStatus
is in the dynasty of MSStorageDriver
in the root\wmi
namespace (which is separate and distinct from root\cimv2
where the class win32_diskdrve
exists) and get's it's non class specific properties from inheritance. The MSStorageDriver
gets it's data direct from the hardware (no provider). Where as win32_diskdrive
has it's own PNPDeviceID
property which uses the provider Win32_DiskDrivePhysicalMedia
. Both query the same data from the hardware but do so separately.
That script above where it gets the InstanceName
is the same as PNPDeviceID
below:
(Get-WmiObject -ComputerName $aComputers -Namespace root\cimv2 -Class win32_diskdrive `
-ErrorAction Continue |
more |
select PNPDeviceID |
Format-Table -AutoSize)
Conclusion
(gwmi -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus).InstanceName
Get's the same data as:
(gwmi -Class Win32_DiskDrive).PNPDeviceID
Comment References
This section contains links intended to reference additional information from the comment section of this answer.
Device Tree
Instance IDs
Solution 2:
If you connect to the remote WMI namespace using a domain account that is a member of the remote computer's local administrator group, UAC token filtering shouldn't take effect.
When I say connect, I mean by specifying the -computer parameter for Get-WMIObject (sorry, not a fan of aliases - I'm a big fan over readability and maintainability!).