PowerShell: comment vérifier si SMART est activé sur les machines distantes

8

J'essayais d'obtenir des informations sur le disque des machines distantes, notamment si SMART est activé ou non sur le lecteur en utilisant la classe win32_diskdrive.

C'est plus compliqué que je ne le pensais. Bien qu'il soit assez facile de lire la propriété status, j'ai découvert quelque chose d'intéressant dans la propriété Capabilities, à savoir la valeur indiquant si "SMART Notification" est disponible. Cette valeur n'apparaîtra que si la commande est exécutée dans un contexte de sécurité élevé. Ainsi, par exemple, si je lance (gwmi win32_diskdrive) .Capacités, la valeur SMART (10) n'apparaît pas encore dans le tableau de valeurs si je l'exécute dans une invite élevée, elle apparaît. Autant que je sache, vous ne pouvez pas exécuter une session winrm dans un contexte élevé (et je ne suis pas intéressé par les hacks schtasks au fromage ou psexec).

Alors j'ai essayé de mapper win32_diskdrive à la classe MSStorageDriver_FailurePredictStatus. Je pense que je devrais le faire de toute façon parce que même si SMART apparaît dans la propriété Capabilities, cela ne signifie pas nécessairement qu'il est activé, non?

Je mappais la propriété PNPDeviceID de win32_diskdrive à la propriété InstanceName de MSStorageDriver_FailurePredictStatus, mais maintenant mon problème est que je ne pense pas que la propriété InstanceName soit suffisamment unique pour que cela fonctionne. Par exemple, voici mon InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Il montre le type d'interface (IDE) le numéro de modèle (ST3250312AS) la version du firmware (JC47) ce que je pensais être un identifiant unique d'une sorte ( 5&350bf0c3&0&0.0.0) puis ce qui ressemble à un numéro d'index (_0). Lorsque je google, 5&350bf0c3&0&0.0.0il affiche des informations sur le lecteur, donc je ne pense pas que ce numéro est unique. Cela signifie que l'unicité est dans le numéro d'index qui n'est pas inclus dans la propriété PNPDeviceID de la classe win32_diskdrive. Il s'agit d'un problème car bon nombre de nos serveurs ont plusieurs disques identiques.

Ma préoccupation est que MSStorageDriver_FailurePredictStatuscela représenterait plusieurs disques comme celui-ci:

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

Et la propriété PNPDeviceID de win32_diskdrive de tous serait simplement IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Comment puis-je mapper de manière fiable des objets récupérés à partir de win32_diskdrive MSStorageDriver_FailurePredictStatusou faire cela d'une autre manière avec PowerShell via des sessions distantes?

Modifier :

On dirait que je réagissais de façon excessive. Lorsque j'ai vérifié un groupe de serveurs, j'ai trouvé InstanceNames \ PNPDeviceIDs comme ceci:

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

Si personne ne peut le confirmer de manière concluante, dans un jour ou deux, je supposerai simplement que cette valeur est réellement unique et la marquerai comme la "réponse".

red888
la source

Réponses:

5

"Lorsque la route avant de se diviser en deux, empruntez un troisième chemin ..." ~ Proverbe télaxien

Scénario

Ceci est le script que j'ai utilisé pour obtenir les données SMART de plusieurs machines. J'ai déjà activé winrmles appareils utilisés dans cet exemple.

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

Cela vous donnera une sortie comme:

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

Notes de script: Dans le fichier texte, j'ai un nom d'hôte répertorié par ligne. Il n'y a pas de virgule séparant les données. En outre, les ordinateurs qui ne disposent pas de lecteurs intelligents ne s'afficheront pas dans le rapport. Vous pouvez personnaliser le rapport avec plus d'options de données à sélectionner, il suffit d'exécuter une Select *au lieu des options que j'ai utilisées dans le script pour voir le vidage complet.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Sur la question des propriétés win32_diskdrivevs MSStorageDriver_FailurePredictStatus... L' MSStorageDriver_FailurePredictStatusest dans la dynastie de MSStorageDriverl' root\wmiespace de noms (qui est séparé et distinct de l' root\cimv2endroit où la classe win32_diskdrveexiste) et obtient ses propriétés non spécifiques à l'héritage. Le MSStorageDriverobtient ses données directement du matériel (aucun fournisseur). Là où win32_diskdrivea sa propre PNPDeviceIDpropriété qui utilise le fournisseur Win32_DiskDrivePhysicalMedia. Les deux interrogent les mêmes données du matériel mais le font séparément.

Le script ci-dessus où il obtient le InstanceNameest le même que PNPDeviceIDci-dessous:

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

Conclusion

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

Obtenez les mêmes données que:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Références de commentaires

Cette section contient des liens destinés à référencer des informations supplémentaires dans la section des commentaires de cette réponse.

Arborescence des périphériques

ID d'instance

Colyn1337
la source
Juste par curiosité, avez-vous une idée pourquoi "_0" est suffixé sur la propriété InstanceName? Au début, je pensais que c'était un numéro d'index, mais selon mon montage, j'ai trouvé que cela ne semble pas être le cas.
red888
1
Cet ensemble de données après l'ID matériel est Device Instance IDégalement appelé ID spécifique à l' instance . Le gestionnaire PnP attribue un identifiant unique à chaque "devnode" dans l'arborescence des périphériques. Étant donné qu'un devnode peut avoir plusieurs périphériques, il les indexe afin qu'ils soient uniques au gestionnaire PnP. C'est pourquoi vous obtenez un _X ajouté au Device Instance ID. Je modifierai ma réponse d'origine avec quelques liens qui devraient vous aider à approfondir cela, si vous le souhaitez.
Colyn1337
1

Si vous vous connectez à l'espace de noms WMI distant à l'aide d'un compte de domaine qui est membre du groupe d'administrateurs local de l'ordinateur distant, le filtrage des jetons UAC ne devrait pas prendre effet.

Quand je dis connect, je veux dire en spécifiant le paramètre -computer pour Get-WMIObject (désolé, pas un fan d'alias - je suis un grand fan de la lisibilité et de la maintenabilité!).

Simon Catlin
la source
Tu as raison, je me suis trompé. La valeur apparaît avec le paramètre -computer, mais je l'ai également trouvée peu fiable - la valeur SMART (10) n'est pas encore présente sur certains disques de machine, mais sur ces mêmes machines, MSStorageDriver_FailurePredictStatus signale que SMART est actif pour ces mêmes lecteurs.
red888