Powershell: So überprüfen Sie, ob SMART auf Remotecomputern aktiviert ist

8

Ich habe versucht, Festplatteninformationen von Remotecomputern abzurufen, einschließlich der Frage, ob SMART auf dem Laufwerk mithilfe der Klasse win32_diskdrive aktiviert ist oder nicht.

Das ist schwieriger als ich dachte. Während es einfach genug ist, die Statuseigenschaft zu lesen, habe ich in der Capabilities-Eigenschaft etwas Interessantes entdeckt - nämlich den Wert, der angibt, ob "SMART Notification" verfügbar ist. Dieser Wert wird nur angezeigt, wenn der Befehl in einem erhöhten Sicherheitskontext ausgeführt wird. Wenn ich zum Beispiel (gwmi win32_diskdrive) .Capabilities ausführe, wird der SMART-Wert (10) noch nicht im Wertearray angezeigt, wenn ich ihn in einer Eingabeaufforderung mit erhöhten Rechten ausführe. Soweit ich weiß, können Sie eine WinRM-Sitzung nicht in einem erhöhten Kontext ausführen (und ich bin nicht an kitschigen Schtasks-Hacks oder Psexec interessiert).

Also habe ich versucht, win32_diskdrive der MSStorageDriver_FailurePredictStatus-Klasse zuzuordnen. Ich denke, ich müsste dies trotzdem tun, denn selbst wenn SMART in der Capabilities-Eigenschaft angezeigt wird, bedeutet dies nicht unbedingt, dass es aktiviert ist, oder?

Ich habe die PNPDeviceID-Eigenschaft von win32_diskdrive der InstanceName-Eigenschaft von MSStorageDriver_FailurePredictStatus zugeordnet, aber jetzt besteht mein Problem darin, dass ich nicht denke, dass die InstanceName-Eigenschaft eindeutig genug ist, damit dies funktioniert. Zum Beispiel ist hier mein Instanzname:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Es zeigt den Schnittstellentyp (IDE), die Modellnummer (ST3250312AS), die Firmware-Version (JC47), was ich für eine eindeutige Kennung hielt ( 5&350bf0c3&0&0.0.0) und dann wie eine Indexnummer (_0). Wenn ich google 5&350bf0c3&0&0.0.0, werden einige Informationen auf dem Laufwerk angezeigt, sodass ich nicht glaube, dass diese Nummer eindeutig ist. Dies bedeutet, dass die Eindeutigkeit in der Indexnummer enthalten ist, die nicht in der PNPDeviceID-Eigenschaft der Klasse win32_diskdrive enthalten ist. Dies ist ein Problem, da viele unserer Server über mehrere identische Festplatten verfügen.

Mein Anliegen ist, dass MSStorageDriver_FailurePredictStatusmehrere Festplatten wie diese dargestellt werden:

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

Und die PNPDeviceID-Eigenschaft von win32_diskdrive von allen wäre einfach IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Wie kann ich Objekte, die von win32_diskdrive abgerufen wurden, zuverlässig auf MSStorageDriver_FailurePredictStatusPowershell über Remote-Sitzungen zuordnen oder auf andere Weise ausführen?

Bearbeiten :

Nun, es sieht so aus, als hätte ich überreagiert. Als ich eine Reihe von Servern überprüfte, fand ich InstanceNames \ PNPDeviceIDs wie folgt:

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

Wenn dies an einem Tag oder so niemand endgültig bestätigen kann, gehe ich einfach davon aus, dass dieser Wert tatsächlich eindeutig ist, und markiere dies als "Antwort".

red888
quelle

Antworten:

5

"Wenn sich die Straße vor Ihnen in zwei Teile teilt, nehmen Sie einen dritten Weg ..." ~ Telaxianisches Sprichwort

Skript

Dies ist das Skript, mit dem ich die SMART-Daten von mehreren Computern abgerufen habe. Ich habe winrmdie in diesem Beispiel verwendeten Geräte bereits aktiviert .

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

Damit erhalten Sie folgende Ausgaben:

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

Skript-Hinweise: In der Textdatei ist ein Hostname pro Zeile aufgeführt. Es gibt keine Kommas, die die Daten trennen. Computer ohne Smart-fähige Laufwerke werden im Bericht nicht angezeigt. Sie können den Bericht mit mehr Datenoptionen zur Auswahl anpassen. Führen Sie Select *statt der im Skript verwendeten Optionen einfach eine aus, um den vollständigen Speicherauszug anzuzeigen.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Auf die Frage von win32_diskdrivevs MSStorageDriver_FailurePredictStatusEigenschaften ... Das MSStorageDriver_FailurePredictStatusist in der Dynastie der MSStorageDriverim root\wmiNamespace (die von separaten und unterschiedlichen ist , root\cimv2wo die Klasse win32_diskdrvevorhanden) und get ist , ist es nicht klassenspezifischen Eigenschaften von Vererbung. Das MSStorageDrivererhält seine Daten direkt von der Hardware (kein Anbieter). Wo wie win32_diskdrivehat seine eigene PNPDeviceIDEigenschaft, die den Anbieter nutzt Win32_DiskDrivePhysicalMedia. Beide fragen dieselben Daten von der Hardware ab, jedoch separat.

Das Skript oben, wo es das bekommt, InstanceNameist das gleiche wie PNPDeviceIDunten:

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

Fazit

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

Holen Sie sich die gleichen Daten wie:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Kommentar Referenzen

Dieser Abschnitt enthält Links, die auf zusätzliche Informationen aus dem Kommentarbereich dieser Antwort verweisen sollen.

Gerätebaum

Instanz-IDs

Colyn1337
quelle
Haben Sie aus Neugier eine Idee, warum "_0" an die InstanceName-Eigenschaft angehängt wird? Anfangs dachte ich, es sei eine Indexnummer, aber gemäß meiner Bearbeitung stellte ich fest, dass dies nicht der Fall zu sein scheint.
Red888
1
Dieser Datensatz nach der Hardware-ID wird Device Instance IDauch als instanzspezifische ID bezeichnet . Der PnP-Manager weist jedem "Devnode" im Gerätebaum eine eindeutige Kennung zu. Da ein Devnode mehrere Geräte haben kann, indiziert er sie so, dass sie für den PnP-Manager eindeutig sind. Aus diesem Grund wird ein _X an das angehängt Device Instance ID. Ich werde meine ursprüngliche Antwort mit ein paar Links bearbeiten, die Ihnen helfen sollen, dies weiter zu untersuchen, falls Sie sich dafür entscheiden.
Colyn1337
1

Wenn Sie über ein Domänenkonto, das Mitglied der lokalen Administratorgruppe des Remotecomputers ist, eine Verbindung zum Remote-WMI-Namespace herstellen, sollte die UAC-Tokenfilterung nicht wirksam werden.

Wenn ich Connect sage, meine ich die Angabe des Parameters -computer für Get-WMIObject (sorry, kein Fan von Aliasen - ich bin ein großer Fan von Lesbarkeit und Wartbarkeit!).

Simon Catlin
quelle
Dein Recht, ich habe mich geirrt. Der Wert wird zwar mit dem Parameter -computer angezeigt, aber ich fand ihn auch unzuverlässig. Der SMART-Wert (10) ist auf einigen Festplatten noch nicht auf denselben Computern vorhanden. MSStorageDriver_FailurePredictStatus meldet, dass SMART für dieselben Laufwerke aktiv ist.
Red888