powershell: Cómo verificar si SMART está habilitado en máquinas remotas

8

Intenté obtener información de disco de máquinas remotas, incluso si SMART está habilitado o no en el disco usando la clase win32_diskdrive.

Esto es más complicado de lo que pensaba. Si bien es bastante fácil leer la propiedad de estado, descubrí algo interesante en la propiedad Capacidades, a saber, el valor que indica si está disponible la "Notificación SMART". Este valor no aparecerá a menos que el comando se ejecute en un contexto de seguridad elevado. Entonces, por ejemplo, si ejecuto (gwmi win32_diskdrive) .Capacidades, el valor INTELIGENTE (10) aún no aparece en la matriz de valores si lo ejecuto en un indicador elevado, sí aparece. Hasta donde sé, no puedes ejecutar una sesión winrm en un contexto elevado (y no estoy interesado en trucos cursis o psexec).

Entonces intenté asignar win32_diskdrive a la clase MSStorageDriver_FailurePredictStatus. Creo que tendría que hacer esto de todos modos porque incluso si SMART aparece en la propiedad Capabilities eso no necesariamente significa que está habilitado, ¿verdad?

Estaba asignando la propiedad PNPDeviceID de win32_diskdrive a la propiedad InstanceName de MSStorageDriver_FailurePredictStatus, pero ahora mi problema es que no creo que la propiedad InstanceName sea lo suficientemente única para que esto funcione. Por ejemplo, aquí está mi InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Muestra el tipo de interfaz (IDE), el número de modelo (ST3250312AS), la versión de firmware (JC47), lo que pensé que era un identificador único de algún tipo ( 5&350bf0c3&0&0.0.0) y luego lo que parece un número de índice (_0). Cuando busco en Google 5&350bf0c3&0&0.0.0, aparece cierta información en el disco, así que no creo que este número sea único. Eso significa que la unicidad está en el número de índice que no está incluido en la propiedad PNPDeviceID de la clase win32_diskdrive. Este es un problema porque muchos de nuestros servidores tienen discos múltiples e idénticos.

Mi preocupación es que MSStorageDriver_FailurePredictStatusrepresentaría múltiples discos como este:

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

Y la propiedad PNPDeviceID de win32_diskdrive de todos ellos sería simplemente IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

¿Cómo puedo asignar de manera confiable los objetos recuperados de win32_diskdrive MSStorageDriver_FailurePredictStatuso hacer esto de otra manera con powershell a través de sesiones remotas?

Editar :

Bueno, parece que estaba exagerando. Cuando revisé un montón de servidores encontré InstanceNames \ PNPDeviceIDs como este:

SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000200_0
SCSI\Disk&Ven_TOSHIBA&Prod_MBF2600RC\5&354ecb35&0&000300_0

Si nadie puede confirmar esto de manera concluyente, en un día más o menos, simplemente asumiré que este valor es realmente único y lo marcaré como la "respuesta".

red888
fuente

Respuestas:

5

"Cuando el camino antes de que se divida en dos, tome un tercer camino ..." ~ Proverbio de Telaxian

Guión

Este es el script que utilicé para obtener los datos SMART de varias máquinas. Ya he habilitado winrmen los dispositivos utilizados en este ejemplo.

$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) 

Eso te dará salida como:

PSComputerName PredictFailure Reason InstanceName                                                            
-------------- -------------- ------ ------------                                                            
4CZ1*****              False      0 IDE\DiskHitachi_HTS723225A7A364_________________ECBOA60W\4&35e86db3&0...
2UA0*****              False      0 IDE\DiskST3160318AS_____________________________HP35____\5&5df8cfa&0&...

Notas del script: en el archivo de texto tengo un nombre de host listado por línea. No hay comas que separen los datos. Además, las computadoras que no tienen unidades inteligentes habilitadas no se mostrarán en el informe. Puede personalizar el informe con más opciones de datos para seleccionar, simplemente ejecute una en Select *lugar de las opciones que utilicé en el script para ver el volcado completo.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Sobre la cuestión de las propiedades win32_diskdrivevs MSStorageDriver_FailurePredictStatus... El MSStorageDriver_FailurePredictStatusestá en la dinastía MSStorageDriveren el root\wmiespacio de nombres (que es separado y distinto de root\cimv2donde win32_diskdrveexiste la clase ) y obtiene sus propiedades de herencia no específicas de la clase. El MSStorageDriverlo consigue es directa de datos desde el hardware (sin proveedor). Donde como win32_diskdrivetiene su propia PNPDeviceIDpropiedad que utiliza el proveedor Win32_DiskDrivePhysicalMedia. Ambos consultan los mismos datos del hardware pero lo hacen por separado.

Ese script de arriba donde se obtiene InstanceNamees el mismo que a PNPDeviceIDcontinuación:

(Get-WmiObject -ComputerName $aComputers -Namespace root\cimv2 -Class win32_diskdrive `
    -ErrorAction Continue |
    more |
    select PNPDeviceID |
    Format-Table -AutoSize)

Conclusión

(gwmi -Namespace root\wmi -Class MSStorageDriver_FailurePredictStatus).InstanceName

Obtener los mismos datos que:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Referencias de comentarios

Esta sección contiene enlaces destinados a hacer referencia a información adicional de la sección de comentarios de esta respuesta.

Árbol de dispositivos

ID de instancia

Colyn1337
fuente
Solo por curiosidad, ¿tiene alguna idea de por qué "_0" tiene el sufijo en la propiedad InstanceName? Inicialmente pensé que era un número de índice, pero según mi edición, descubrí que parece no ser el caso.
red888
1
Ese conjunto de datos después de la ID del hardware Device Instance IDtambién se conoce como ID específica de la instancia . El administrador PnP asigna un identificador único a cada "devnode" en el árbol de dispositivos. Debido a que un devnode puede tener múltiples dispositivos, los indexa para que sean únicos para el administrador PnP. Es por eso que obtienes un _X agregado al Device Instance ID. Editaré mi respuesta original con algunos enlaces que deberían ayudarlo a explorar esto más a fondo, si decide hacerlo.
Colyn1337
1

Si se conecta al espacio de nombres WMI remoto utilizando una cuenta de dominio que es miembro del grupo de administradores locales de la computadora remota, el filtrado de tokens UAC no debería tener efecto.

Cuando digo de conexión, es decir especificando la -computer parámetro para Get-WMIObject (lo siento, no es un fan de alias - Soy un gran fan sobre la legibilidad y facilidad de mantenimiento!).

Simon Catlin
fuente
Tienes razón, me equivoqué. El valor aparece con el parámetro -computer, pero también lo encontré poco confiable- el valor SMART (10) aún no está presente en los discos de algunas máquinas en estas mismas máquinas. MSStorageDriver_FailurePredictStatus informa que SMART está activo para estas mismas unidades.
red888