PowerShell: Cara memeriksa apakah SMART diaktifkan pada mesin jarak jauh

8

Saya mencoba untuk mendapatkan info disk dari mesin jarak jauh, termasuk apakah SMART diaktifkan atau tidak pada drive dengan menggunakan kelas win32_diskdrive.

Ini lebih sulit daripada yang saya kira. Meskipun cukup mudah membaca properti status saya menemukan sesuatu yang menarik di properti Capabilities - yaitu nilai yang menunjukkan jika "Pemberitahuan SMART" tersedia. Nilai ini tidak akan muncul kecuali perintah dijalankan dalam konteks keamanan yang ditinggikan. Jadi misalnya jika saya menjalankan (gwmi win32_diskdrive) .Kemampuan nilai SMART (10) belum muncul dalam array nilai namun jika saya menjalankannya dalam prompt yang ditinggikan itu muncul. Sejauh yang saya tahu Anda tidak dapat menjalankan sesi winrm dalam konteks yang tinggi (dan saya tidak tertarik dengan hack schtasks atau psexec).

Jadi saya mencoba memetakan win32_diskdrive ke kelas MSStorageDriver_FailurePredictStatus. Saya pikir saya tetap harus melakukan ini karena walaupun SMART muncul di properti Capabilities itu tidak berarti diaktifkan kan?

Saya memetakan properti PNPDeviceID dari win32_diskdrive ke properti InstanceName dari MSStorageDriver_FailurePredictStatus, tetapi sekarang masalah saya adalah saya tidak berpikir bahwa properti InstanceName cukup unik untuk berfungsi. Misalnya di sini adalah InstanceName saya:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Ini menunjukkan jenis antarmuka (IDE) nomor model (ST3250312AS) versi firmware (JC47) apa yang saya pikir adalah pengidentifikasi unik dari beberapa jenis ( 5&350bf0c3&0&0.0.0) lalu apa yang tampak seperti nomor indeks (_0). Ketika saya google 5&350bf0c3&0&0.0.0itu muncul beberapa info pada drive jadi saya tidak berpikir nomor ini unik. Itu berarti keunikannya adalah dalam nomor indeks yang tidak termasuk dalam properti PNPDeviceID dari kelas win32_diskdrive. Ini adalah masalah karena banyak dari server kami memiliki banyak disk yang identik.

Kekhawatiran saya adalah bahwa MSStorageDriver_FailurePredictStatusakan mewakili banyak disk seperti ini:

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

Dan properti PNPDeviceID dari win32_diskdrive semuanya akan menjadi IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Bagaimana saya bisa memetakan objek yang diambil dari win32_diskdrive ke MSStorageDriver_FailurePredictStatusatau melakukan ini dengan cara lain dengan menggunakan PowerShell melalui sesi jarak jauh?

Edit :

Sepertinya saya bereaksi berlebihan. Ketika saya memeriksa banyak server, saya menemukan InstanceNames \ PNPDeviceIDs seperti ini:

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

Jika tidak ada yang dapat mengkonfirmasi ini secara meyakinkan, dalam sehari atau lebih, saya hanya akan menganggap nilai ini benar-benar unik dan menandainya sebagai "jawaban".

red888
sumber

Jawaban:

5

"Ketika jalan sebelum kamu terbelah dua, ambil jalan ketiga ..." ~ Pepatah Telaxian

Naskah

Ini adalah skrip yang saya gunakan untuk mendapatkan data SMART dari banyak mesin. Saya sudah mengaktifkan winrmperangkat yang digunakan dalam contoh ini.

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

Itu akan memberi Anda output seperti:

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

Catatan Skrip: Dalam file teks saya memiliki satu nama host terdaftar per baris. Tidak ada koma yang memisahkan data. Selain itu, komputer yang tidak memiliki drive yang diaktifkan pintar tidak akan ditampilkan di laporan. Anda dapat menyesuaikan laporan dengan lebih banyak opsi data untuk dipilih, jalankan saja Select *alih - alih opsi yang saya gunakan dalam skrip untuk melihat dump penuh.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Pada pertanyaan tentang properti win32_diskdrivevs MSStorageDriver_FailurePredictStatus... Ada MSStorageDriver_FailurePredictStatusdi dinasti MSStorageDriverdi root\wminamespace (yang terpisah dan berbeda dari root\cimv2tempat kelas itu win32_diskdrveada) dan dapatkan itu properti non kelas spesifik dari warisan. The MSStorageDrivermendapatkan data itu langsung dari perangkat keras (tidak ada penyedia). Dimana win32_diskdrivememiliki PNPDeviceIDproperti sendiri yang menggunakan penyedia Win32_DiskDrivePhysicalMedia. Keduanya meminta data yang sama dari perangkat keras tetapi melakukannya secara terpisah.

Script di atas di mana ia mendapat InstanceNameadalah sama dengan di PNPDeviceIDbawah ini:

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

Kesimpulan

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

Dapatkan data yang sama dengan:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Referensi Komentar

Bagian ini berisi tautan yang dimaksudkan untuk referensi informasi tambahan dari bagian komentar dari jawaban ini.

Pohon Perangkat

ID Instans

Colyn1337
sumber
Karena penasaran, apakah Anda tahu mengapa "_0" diakhiri dengan properti InstanceName? Awalnya saya pikir itu nomor indeks, tetapi sesuai edit saya, saya menemukan bahwa tampaknya tidak demikian.
red888
1
Seperangkat data setelah ID perangkat keras Device Instance IDjuga disebut sebagai instance-spesifik-ID . Manajer PnP memberikan pengidentifikasi unik untuk setiap "devnode" di bagan perangkat. Karena devnode dapat memiliki beberapa perangkat, ini mengindeksnya sehingga unik untuk manajer PnP. Inilah sebabnya mengapa Anda mendapatkan _X ditambahkan ke Device Instance ID. Saya akan mengedit jawaban asli saya dengan beberapa tautan yang akan membantu Anda menjelajahi ini lebih jauh, jika Anda memilih untuk melakukannya.
Colyn1337
1

Jika Anda terhubung ke namespace WMI jarak jauh menggunakan akun domain yang merupakan anggota grup administrator lokal komputer jarak jauh, pemfilter token UAC tidak akan berlaku.

Ketika saya mengatakan connect, maksud saya dengan menentukan -komputer parameter untuk Get-WMIObject (maaf, bukan penggemar alias - Saya adalah penggemar besar atas pembacaan dan rawatan!).

Simon Catlin
sumber
Hak kamu, saya salah. Nilai tidak muncul dengan param-komputer, tetapi saya juga menemukan itu tidak dapat diandalkan- nilai SMART (10) belum ada pada beberapa disk mesin pada mesin yang sama ini. MSStorageDriver_FailurePredictStatus melaporkan SMART aktif untuk drive yang sama.
red888