powershell: Cách kiểm tra xem SMART có được bật trên các máy từ xa không


8

Tôi đã cố gắng để có được thông tin ổ đĩa của các máy từ xa, bao gồm cả việc có bật SMART hay không trên ổ đĩa bằng cách sử dụng lớp win32_diskdrive.

Điều này là khó khăn hơn tôi nghĩ. Mặc dù việc đọc thuộc tính trạng thái đủ dễ dàng nhưng tôi đã phát hiện ra một điều thú vị trong thuộc tính Khả năng - cụ thể là giá trị biểu thị nếu "Thông báo SMART" khả dụng. Giá trị này sẽ không xuất hiện trừ khi lệnh được chạy trong bối cảnh bảo mật nâng cao. Vì vậy, ví dụ nếu tôi chạy (gwmi win32_diskdrive). Khả năng giá trị SMART (10) chưa xuất hiện trong mảng các giá trị nếu tôi chạy nó trong dấu nhắc nâng cao thì nó sẽ xuất hiện. Theo như tôi biết, bạn không thể chạy một phiên winrm trong bối cảnh nâng cao (và tôi không quan tâm đến các bản hack scht task cheesy hoặc psexec).

Vì vậy, sau đó tôi đã cố gắng ánh xạ win32_diskdrive sang lớp MSStorageDriver_FailurePredictStatus. Tôi nghĩ rằng dù sao tôi cũng sẽ phải làm điều này bởi vì ngay cả khi SMART xuất hiện trong thuộc tính Khả năng không nhất thiết có nghĩa là nó được kích hoạt phải không?

Tôi đã ánh xạ thuộc tính PNPDeviceID của win32_diskdrive sang thuộc tính InstanceName của MSStorageDriver_FailurePredictStatus, nhưng bây giờ vấn đề của tôi là tôi không nghĩ rằng thuộc tính InstanceName đủ để nó hoạt động. Ví dụ ở đây là InstanceName của tôi:IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

Nó hiển thị loại giao diện (IDE) số kiểu máy (ST3250312AS) phiên bản phần sụn (JC47) mà tôi nghĩ là một mã định danh duy nhất của một loại ( 5&350bf0c3&0&0.0.0) sau đó trông giống như một số chỉ mục (_0). Khi tôi google, 5&350bf0c3&0&0.0.0nó sẽ xuất hiện một số thông tin trên ổ đĩa vì vậy tôi không nghĩ con số này là duy nhất. Điều đó có nghĩa là tính duy nhất nằm trong số chỉ mục không được bao gồm trong thuộc tính PNPDeviceID của lớp win32_diskdrive. Đây là một vấn đề vì nhiều máy chủ của chúng tôi có nhiều đĩa giống hệt nhau.

Mối quan tâm của tôi là MSStorageDriver_FailurePredictStatussẽ đại diện cho nhiều đĩa như thế này:

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

Và thuộc tính PNPDeviceID của win32_diskdrive của tất cả chúng sẽ chỉ là IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

Làm cách nào tôi có thể ánh xạ các đối tượng đáng tin cậy được truy xuất từ ​​win32_diskdrive sang MSStorageDriver_FailurePredictStatushoặc thực hiện theo cách khác với powershell thông qua các phiên từ xa?

Chỉnh sửa :

Chà có vẻ như tôi đã phản ứng quá mức. Khi tôi kiểm tra một loạt các máy chủ, tôi thấy InstanceNames \ PNPDeviceID như thế này:

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

Nếu không ai có thể kết luận chắc chắn điều này, trong một ngày hoặc lâu hơn, tôi sẽ chỉ cho rằng giá trị này thực sự là duy nhất và đánh dấu đây là "câu trả lời".

Câu trả lời:


5

"Khi con đường trước khi bạn chia làm hai, hãy đi một con đường thứ ba ..." ~ Tục ngữ Telaxian

Kịch bản

Đây là tập lệnh tôi đã sử dụng để lấy dữ liệu SMART từ nhiều máy. Tôi đã kích hoạt winrmtrên các thiết bị được sử dụng trong ví dụ này.

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

Điều đó sẽ giúp bạn có đầu ra như:

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

Script Notes: Trong tệp văn bản tôi có một tên máy chủ được liệt kê trên mỗi dòng. Không có dấu phẩy phân tách dữ liệu. Ngoài ra, các máy tính không có ổ đĩa kích hoạt thông minh sẽ không hiển thị trên báo cáo. Bạn có thể tùy chỉnh báo cáo với nhiều tùy chọn dữ liệu hơn để chọn, chỉ cần chạy Select *thay vì các tùy chọn tôi đã sử dụng trong tập lệnh để xem kết xuất đầy đủ.

Win32_diskdrive vs MSStorageDriver_FailurePredictStatus

Về vấn đề win32_diskdrivevs MSStorageDriver_FailurePredictStatustính ... Các MSStorageDriver_FailurePredictStatuslà trong triều đại MSStorageDrivertrong root\wmikhông gian tên (đó là riêng biệt và khác biệt với root\cimv2nơi lớp win32_diskdrvetồn tại) và get là nó tính chất phi lớp cụ thể từ các thừa kế. Các MSStorageDrivernhận dữ liệu của nó trực tiếp từ phần cứng (không cung cấp). Trường hợp win32_diskdrivePNPDeviceIDtài sản riêng sử dụng nhà cung cấp Win32_DiskDrivePhysicalMedia. Cả hai truy vấn cùng một dữ liệu từ phần cứng nhưng làm như vậy riêng biệt.

Kịch bản trên mà nó nhận được InstanceNamegiống như PNPDeviceIDdưới đây:

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

Phần kết luận

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

Nhận dữ liệu giống như:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

Nhận xét tài liệu tham khảo

Phần này chứa các liên kết nhằm tham khảo thông tin bổ sung từ phần bình luận của câu trả lời này.

Cây thiết bị

ID sơ thẩm


Vì tò mò, bạn có biết tại sao "_0" lại được thêm vào thuộc tính InstanceName không? Ban đầu tôi nghĩ đó là một số chỉ mục, nhưng theo chỉnh sửa của tôi, tôi thấy rằng dường như không phải là trường hợp.
red888

1
Tập dữ liệu đó sau ID phần cứng Device Instance IDcũng được gọi là ID cụ thể . Trình quản lý PnP chỉ định một mã định danh duy nhất cho mỗi "devnode" trong cây thiết bị. Bởi vì một devnode có thể có nhiều thiết bị, nó lập chỉ mục chúng sao cho chúng là duy nhất cho trình quản lý PnP. Đây là lý do tại sao bạn nhận được một _X được gắn vào Device Instance ID. Tôi sẽ chỉnh sửa câu trả lời ban đầu của mình bằng một vài liên kết sẽ giúp bạn khám phá điều này hơn nữa, nếu bạn chọn làm như vậy.
Colyn1337

1

Nếu bạn kết nối với không gian tên WMI từ xa bằng tài khoản miền là thành viên của nhóm quản trị viên cục bộ của máy tính từ xa, lọc mã thông báo UAC sẽ không có hiệu lực.

Khi tôi nói kết nối, tôi có nghĩa là bằng cách xác định -computer tham số cho Get-WmiObject (xin lỗi, không phải là một fan hâm mộ của bí danh - Tôi là một fan hâm mộ lớn hơn khả năng đọc và khả năng bảo trì!).


Quyền của bạn tôi đã nhầm. Giá trị xuất hiện với thông số máy tính, nhưng tôi cũng thấy nó không đáng tin cậy - giá trị SMART (10) chưa xuất hiện trên một số đĩa của máy trên cùng các máy này MSStorageDriver_FailurePredictStatus báo cáo SMART đang hoạt động cho cùng các ổ đĩa này.
red888
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.