powershell: как проверить, включен ли SMART на удаленных машинах

8

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

Это сложнее, чем я думал. Хотя прочитать свойство status довольно просто, я обнаружил кое-что интересное в свойстве Capabilities, а именно значение, обозначающее, доступно ли «SMART Notification». Это значение не появится, если команда не выполняется в контексте повышенной безопасности. Так, например, если я запускаю (gwmi win32_diskdrive). Возможности, значение 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

Если никто не сможет окончательно подтвердить это, через день или около того, я просто предположу, что это значение действительно уникально, и пометить это как «ответ».

red888
источник

Ответы:

5

«Когда дорога перед вами расколется на две части, выберите третий путь ...»

скрипт

Это сценарий, который я использовал для получения данных 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 vs MSStorageDriver_FailurePredictStatus

На вопрос о свойствах win32_diskdrivevs MSStorageDriver_FailurePredictStatus... MSStorageDriver_FailurePredictStatusнаходится в династии MSStorageDriverв root\wmiпространстве имен (которое отличается от того, root\cimv2где win32_diskdrveсуществует класс ) и получает его не специфичные для класса свойства из наследования. MSStorageDriverПолучает свои данные непосредственно из аппаратных средств (не провайдера). Где as 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

Комментарий Ссылки

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

Дерево устройств

Идентификаторы экземпляров

Colyn1337
источник
Просто из любопытства, у вас есть идея, почему в свойстве InstanceName стоит суффикс "_0"? Первоначально я думал, что это был индексный номер, но согласно моему редактированию, я обнаружил, что это не так.
red888
1
Этот набор данных после идентификатора оборудования Device Instance IDтакже называется идентификатором конкретного экземпляра . Менеджер PnP назначает уникальный идентификатор каждому «devnode» в дереве устройств. Поскольку у devnode может быть несколько устройств, он индексирует их так, чтобы они были уникальными для PnP-менеджера. Вот почему вы добавляете _X к Device Instance ID. Я отредактирую свой оригинальный ответ с несколькими ссылками, которые должны помочь вам изучить это дальше, если вы решите это сделать.
Colyn1337
1

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

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

Саймон Кэтлин
источник
Ваше право, я ошибся. Значение отображается вместе с параметром -computer, но я также обнаружил, что оно ненадежно - значение SMART (10) отсутствует на дисках некоторых компьютеров, но на этих же машинах MSStorageDriver_FailurePredictStatus сообщает, что SMART активен для этих же дисков.
red888