Назад | Перейти на главную страницу

powershell: как проверить, включен ли S.M.A.R.T на удаленных машинах

Я пытался получить информацию о дисках удаленных машин, в том числе о том, включен ли SMART на диске, с помощью класса win32_diskdrive.

Это сложнее, чем я думал. Хотя прочитать свойство статуса достаточно просто, я обнаружил кое-что интересное в свойстве Capabilities, а именно значение, обозначающее, доступно ли «SMART Notification». Это значение не будет отображаться, если команда не будет запущена в контексте повышенной безопасности. Так, например, если я запускаю (gwmi win32_diskdrive) .Capabilities, то значение SMART (10) еще не появляется в массиве значений, если я запускаю его в приглашении с повышенными правами, оно появляется. Насколько я знаю, вы не можете запустить сеанс WinRM в повышенном контексте (и меня не интересуют дрянные взломы schtasks или psexec).

Итак, я попытался сопоставить win32_diskdrive с классом MSStorageDriver_FailurePredictStatus. Я думаю, что мне все равно придется это сделать, потому что даже если SMART отображается в свойстве Capabilities, это не обязательно означает, что он включен, правильно?

Я сопоставлял свойство PNPDeviceID win32_diskdrive со свойством InstanceName MSStorageDriver_FailurePredictStatus, но теперь моя проблема в том, что я не думаю, что свойство InstanceName достаточно уникально, чтобы это работало. Например, вот мое имя экземпляра: IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Он показывает тип интерфейса (IDE), номер модели (ST3250312AS), версию прошивки (JC47), что, как я думал, было каким-то уникальным идентификатором (5&350bf0c3&0&0.0.0), а затем то, что выглядит как порядковый номер (_0). Когда я погуглил 5&350bf0c3&0&0.0.0 он показывает некоторую информацию о диске, поэтому я не думаю, что этот номер уникален. Это означает, что уникальность заключается в номере индекса, который не включен в свойство PNPDeviceID класса win32_diskdrive. Это проблема, поскольку многие из наших серверов имеют несколько идентичных дисков.

Меня беспокоит то, что 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

И свойство PNPDeviceID Win32_diskdrive всех из них будет просто IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Как я могу надежно сопоставить объекты, полученные из win32_diskdrive, с MSStorageDriver_FailurePredictStatus или сделать это другим способом с помощью 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&...

Примечания к сценарию: В текстовом файле в каждой строке указано одно имя хоста. Данные не разделяются запятыми. Кроме того, в отчете не будут отображаться компьютеры, на которых отсутствуют интеллектуальные диски. Вы можете настроить отчет, добавив в него дополнительные параметры данных, просто запустите Select * вместо параметров, которые я использовал в сценарии, чтобы увидеть полный дамп.

Win32_diskdrive против MSStorageDriver_FailurePredictStatus

По вопросу о win32_diskdrive против MSStorageDriver_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 экземпляра

Если вы подключаетесь к удаленному пространству имен WMI с использованием учетной записи домена, которая является членом локальной группы администраторов удаленного компьютера, фильтрация маркеров UAC не должен вступят в силу.

Когда я говорю "подключиться", я имею в виду указание -компьютер параметр для Get-WMIObject (извините, не фанат псевдонимов - я большой поклонник удобочитаемости и ремонтопригодности!).