Powershell

powershell:如何檢查遠端機器上是否啟用了 SMART

  • August 18, 2016

我試圖獲取遠端機器的磁碟資訊,包括是否使用 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&...

腳本註釋: 在文本文件中,我每行列出一個主機名。沒有逗號分隔數據。此外,沒有智能驅動器的電腦不會顯示在報告中。您可以使用更多數據選項自定義報告以供選擇,只需執行 aSelect *而不是我在腳本中使用的選項即可查看完整轉儲。

Win32_diskdrive 與 MSStorageDriver_FailurePredictStatus

關於win32_diskdrivevsMSStorageDriver_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

評論參考

本部分包含旨在引用此答案評論部分的其他資訊的連結。

設備樹

實例 ID

引用自:https://serverfault.com/questions/544419