powershell:如何檢查遠端機器上是否啟用了 SMART
我試圖獲取遠端機器的磁碟資訊,包括是否使用 win32_diskdrive 類在驅動器上啟用了 SMART。
這比我想像的要棘手。雖然讀取狀態屬性很容易,但我在 Capabilities 屬性中發現了一些有趣的東西——即表示“SMART Notification”是否可用的值。除非命令在提升的安全上下文中執行,否則不會出現此值。因此,例如,如果我執行 (gwmi win32_diskdrive).Capabilities SMART 值 (10) 不會出現在值數組中,但如果我在提升的提示符下執行它,它確實會出現。據我所知,您無法在提升的上下文中執行 winrm 會話(而且我對俗氣的 schtasks hacks 或 psexec 不感興趣)。
因此,我嘗試將 win32_diskdrive 映射到 MSStorageDriver_FailurePredictStatus 類。我認為無論如何我都必須這樣做,因為即使 SMART 出現在 Capabilities 屬性中也不一定意味著它已啟用,對嗎?
我將 win32_diskdrive 的 PNPDeviceID 屬性映射到 MSStorageDriver_FailurePredictStatus 的 InstanceName 屬性,但現在我的問題是我認為 InstanceName 屬性不夠獨特,無法正常工作。例如,這是我的 InstanceName:
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0
它顯示介面類型 (IDE) 型號 (ST3250312AS) 韌體版本 (JC47) 我認為是某種唯一標識符 (
5&350bf0c3&0&0.0.0
) 然後看起來像索引號 (_0)。當我用Google搜尋5&350bf0c3&0&0.0.0
時,它會在驅動器上顯示一些資訊,所以我認為這個數字不是唯一的。這意味著唯一性在於索引號,該索引號未包含在 win32_diskdrive 類的 PNPDeviceID 屬性中。這是一個問題,因為我們的許多伺服器都有多個相同的磁碟。我擔心的是這
MSStorageDriver_FailurePredictStatus
將代表多個磁碟,如下所示:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_1 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_2
並且所有它們的 win32_diskdrive 的 PNPDeviceID 屬性將只是
IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0
如何
MSStorageDriver_FailurePredictStatus
通過遠端會話可靠地將從 win32_diskdrive 檢索到的對象映射到 powershell 或以另一種方式執行此操作?編輯:
好吧,看來我反應過度了。當我檢查一堆伺服器時,我發現 InstanceNames\PNPDeviceIDs 如下所示:
SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000200_0 SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000300_0
如果沒有人可以在一天左右的時間內最終確認這一點,我將假設該值實際上是唯一的並將其標記為“答案”。
“當你面前的道路一分為二時,走第三條路……”~特拉西安諺語
腳本
這是我用來從多台機器獲取 SMART 數據的腳本。我已經
winrm
在本範例中使用的設備上啟用了。$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)
這將使您得到如下輸出:
PSComputerName PredictFailure Reason InstanceName -------------- -------------- ------ ------------ 4CZ1***** False 0 IDE\DiskHitachi_HTS723225A7A364_________________ECBOA60W\4&35e86db3&0... 2UA0***** False 0 IDE\DiskST3160318AS_____________________________HP35____\5&5df8cfa&0&...
腳本註釋: 在文本文件中,我每行列出一個主機名。沒有逗號分隔數據。此外,沒有智能驅動器的電腦不會顯示在報告中。您可以使用更多數據選項自定義報告以供選擇,只需執行 a
Select *
而不是我在腳本中使用的選項即可查看完整轉儲。Win32_diskdrive 與 MSStorageDriver_FailurePredictStatus
關於
win32_diskdrive
vsMSStorageDriver_FailurePredictStatus
屬性的問題……它屬於命名空間中的MSStorageDriver_FailurePredictStatus
王朝(它與類存在的位置分開且不同)並且從繼承中獲取它的非類特定屬性。直接從硬體(無提供者)獲取數據。哪裡有它自己的財產,它使用提供者。兩者都從硬體查詢相同的數據,但分別進行。MSStorageDriver``root\wmi``root\cimv2``win32_diskdrve``MSStorageDriver``win32_diskdrive``PNPDeviceID``Win32_DiskDrivePhysicalMedia
上面的腳本與下面
InstanceName
的相同PNPDeviceID
:(Get-WmiObject -ComputerName $aComputers -Namespace root\cimv2 -Class win32_diskdrive ` -ErrorAction Continue | more | select PNPDeviceID | Format-Table -AutoSize)
結論
(gwmi -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus).InstanceName
獲取與以下相同的數據:
(gwmi -Class Win32_DiskDrive).PNPDeviceID
評論參考
本部分包含旨在引用此答案評論部分的其他資訊的連結。