powershell: come verificare se SMART è abilitato su macchine remote


8

Stavo tentando di ottenere informazioni sul disco di macchine remote, incluso se SMART è abilitato o meno sull'unità utilizzando la classe win32_diskdrive.

Questo è più complicato di quanto pensassi. Mentre è abbastanza facile leggere la proprietà status, ho scoperto qualcosa di interessante nella proprietà Capabilities, vale a dire il valore che indica se è disponibile "Notifica SMART". Questo valore non verrà visualizzato se il comando non viene eseguito in un contesto di sicurezza elevato. Quindi, ad esempio, se eseguo (gwmi win32_diskdrive). Capacità il valore SMART (10) non appare nella matrice di valori ma se lo eseguo in un prompt elevato, appare. Per quanto ne so, non è possibile eseguire una sessione winrm in un contesto elevato (e non mi interessano gli schtasks di schizzi di formaggio o i psexec).

Quindi ho provato a mappare win32_diskdrive sulla classe MSStorageDriver_FailurePredictStatus. Penso che dovrei farlo comunque perché anche se SMART appare nella proprietà Capabilities che non significa necessariamente che sia abilitato giusto?

Stavo mappando la proprietà PNPDeviceID di win32_diskdrive sulla proprietà InstanceName di MSStorageDriver_FailurePredictStatus, ma ora il mio problema è che non penso che la proprietà InstanceName sia abbastanza unica per funzionare. Ad esempio, ecco il mio InstanceName:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Mostra il tipo di interfaccia (IDE) il numero di modello (ST3250312AS) la versione del firmware (JC47) quello che pensavo fosse un identificatore univoco di qualche tipo ( 5&350bf0c3&0&0.0.0) quindi quello che sembra un numero indice (_0). Quando utilizzo Google 5&350bf0c3&0&0.0.0, vengono visualizzate alcune informazioni sull'unità, quindi non credo che questo numero sia unico. Ciò significa che l'unicità è nel numero indice che non è incluso nella proprietà PNPDeviceID della classe win32_diskdrive. Questo è un problema perché molti dei nostri server hanno dischi multipli, identici.

La mia preoccupazione è che MSStorageDriver_FailurePredictStatusrappresenterebbe più dischi come questo:

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

E la proprietà PNPDeviceID di win32_diskdrive di tutti loro sarebbe solo IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Come posso mappare in modo affidabile oggetti recuperati da win32_diskdrive MSStorageDriver_FailurePredictStatuso farlo in un altro modo con PowerShell tramite sessioni remote?

Modifica :

Beh, sembra che stavo reagendo in modo eccessivo. Quando ho controllato un gruppo di server ho trovato InstanceNames \ PNPDeviceIDs come questo:

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

Se nessuno può confermarlo definitivamente, tra circa un giorno, supporrò solo che questo valore sia effettivamente unico e lo segnerò come "risposta".

Risposte:


5

"Quando la strada davanti a te si divide in due, prendi un terzo percorso ..." ~ Proverbio Telaxian

copione

Questo è lo script che ho usato per ottenere i dati SMART da più macchine. Ho già abilitato winrmsui dispositivi utilizzati in questo esempio.

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

Questo ti porterà in output come:

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

Note sullo script: nel file di testo ho un nome host elencato per riga. Non ci sono virgole che separano i dati. Inoltre, i computer che non dispongono di unità abilitate intelligenti non verranno visualizzati nel rapporto. Puoi personalizzare il rapporto con più opzioni di dati da selezionare, basta eseguire una Select *invece delle opzioni che ho usato nello script per vedere il dump completo.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Sulla questione delle proprietà win32_diskdrivevs MSStorageDriver_FailurePredictStatus... The MSStorageDriver_FailurePredictStatusè nella dinastia di MSStorageDrivernello root\wmispazio dei nomi (che è separato e distinto da root\cimv2dove win32_diskdrveesiste la classe ) e ottieni l'ereditarietà non è proprietà specifiche della classe. MSStorageDriverL'ottiene i propri dati direttamente dall'hardware (nessun fornitore). Dove come win32_diskdriveha la propria PNPDeviceIDproprietà che utilizza il provider Win32_DiskDrivePhysicalMedia. Entrambi interrogano gli stessi dati dall'hardware ma lo fanno separatamente.

Lo script sopra dove ottiene InstanceNamelo stesso è lo stesso di PNPDeviceIDseguito:

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

Conclusione

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

Ottieni gli stessi dati di:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Riferimenti ai commenti

Questa sezione contiene collegamenti destinati a fare riferimento a informazioni aggiuntive dalla sezione dei commenti di questa risposta.

Albero dei dispositivi

ID istanza


Solo per curiosità, hai idea del perché "_0" sia suffisso nella proprietà InstanceName? Inizialmente ho pensato che fosse un numero indice, ma secondo la mia modifica, ho scoperto che non sembra essere il caso.
Red888

1
Quel set di dati dopo l'ID hardware è Device Instance IDanche indicato come ID specifico dell'istanza . Il gestore PnP assegna un identificatore univoco a ciascun "nodo" nella struttura dei dispositivi. Poiché un devnode può avere più dispositivi, li indicizza in modo che siano univoci per il gestore PnP. Questo è il motivo per cui si ottiene un _X aggiunto a Device Instance ID. Modificherò la mia risposta originale con alcuni link che dovrebbero aiutarti a esplorare ulteriormente questo, se scegli di farlo.
Colyn1337,

1

Se ci si connette allo spazio dei nomi WMI remoto utilizzando un account di dominio membro del gruppo di amministratori locali del computer remoto, il filtro token UAC non dovrebbe avere effetto.

Quando dico connect, intendo specificando il parametro -computer per Get-WMIObject (scusate, non sono un fan degli alias - sono un grande fan per la leggibilità e la manutenibilità!).


Alla tua destra mi sbagliavo. Il valore viene visualizzato con il parametro -computer, ma l'ho trovato anche inaffidabile: il valore SMART (10) non è presente sui dischi di alcune macchine, ma su queste stesse macchine MSStorageDriver_FailurePredictStatus segnala che SMART è attivo per le stesse unità.
Red888
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.