powershell : 원격 시스템에서 SMART가 활성화되어 있는지 확인하는 방법


8

win32_diskdrive 클래스를 사용하여 드라이브에서 SMART를 사용할 수 있는지 여부를 포함하여 원격 컴퓨터의 디스크 정보를 얻으려고했습니다.

생각보다 까다 롭습니다. status 속성을 읽는 것이 쉽지만 Capabilities 속성에서 흥미로운 것을 발견했습니다. 즉 "SMART Notification"을 사용할 수 있는지 여부를 나타내는 값입니다. 높은 보안 컨텍스트에서 명령을 실행하지 않으면이 값이 나타나지 않습니다. 예를 들어 (gwmi win32_diskdrive) .Capabilities를 실행하면 SMART 값 (10)이 값 배열에 나타나지 않지만 상승 된 프롬프트에서 실행하면 나타납니다. 내가 아는 한 높은 컨텍스트에서 winrm 세션을 실행할 수 없습니다 (그리고 나는 cheschy schtasks hacks 또는 psexec에 관심이 없습니다).

그런 다음 win32_diskdrive를 MSStorageDriver_FailurePredictStatus 클래스에 매핑하려고 시도했습니다. SMART가 Capabilities 속성에 나타나더라도 반드시 활성화 된 권한을 의미하지는 않기 때문에이 작업을 수행해야한다고 생각합니다.

win32_diskdrive의 PNPDeviceID 속성을 MSStorageDriver_FailurePredictStatus의 InstanceName 속성에 매핑하고 있었지만 이제는 InstanceName 속성이 고유 한 것으로 생각하지 않는다는 문제가 있습니다. 예를 들어 여기 내 인스턴스 이름이 있습니다.IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

인터페이스 유형 (IDE) 모델 번호 (ST3250312AS) 펌웨어 버전 (JC47)이 어떤 종류의 고유 식별자라고 생각한 것 ( 5&350bf0c3&0&0.0.0)과 색인 번호 (_0)처럼 보이는 것을 보여줍니다. Google 5&350bf0c3&0&0.0.0에서 드라이브의 일부 정보를 표시 하므로이 숫자가 고유하지 않다고 생각합니다. 즉, 고유성이 win32_diskdrive 클래스의 PNPDeviceID 특성에 포함되지 않은 색인 번호에 있음을 의미합니다. 많은 서버에 여러 개의 동일한 디스크가 있기 때문에 문제가됩니다.

내 관심사는 MSStorageDriver_FailurePredictStatus다음과 같은 여러 디스크를 나타냅니다.

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

그리고 win32_diskdrive의 PNPDeviceID 속성은 모두 IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0

win32_diskdrive에서 검색된 객체 MSStorageDriver_FailurePredictStatus를 원격 세션을 통해 powershell로 다른 방법으로 안정적으로 매핑 하거나 다른 방법으로 수행 할 수 있습니까?

편집 :

글쎄, 내가 과잉 반응하고있는 것 같습니다. 여러 서버를 확인했을 때 다음과 같이 InstanceNames \ PNPDeviceID를 찾았습니다.

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

아무도 이것을 확정적으로 확인할 수 없다면, 하루 만에이 값이 실제로 고유하다고 가정하고 이것을 "답변"으로 표시합니다.

답변:


5

"둘로 갈라질 때 길을 세번째 길로 가십시오 ..."

스크립트

이것은 여러 컴퓨터에서 SMART 데이터를 가져 오는 데 사용한 스크립트입니다. winrm이 예제에서 사용 된 장치에서 이미 활성화 했습니다.

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

그러면 다음과 같이 출력됩니다.

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

스크립트 노트 : 텍스트 파일에는 줄당 하나의 호스트 이름이 나열되어 있습니다. 데이터를 구분하는 쉼표는 없습니다. 또한 스마트 지원 드라이브가없는 컴퓨터는 보고서에 표시되지 않습니다. 더 많은 데이터 옵션을 사용하여 보고서를 사용자 정의 할 수 있습니다 Select *. 스크립트에서 사용한 옵션 대신 전체 덤프를 보려면 대신 실행 하십시오.

Win32_diskdrive 대 MSStorageDriver_FailurePredictStatus

win32_diskdrivevs MSStorageDriver_FailurePredictStatus속성에 대한 질문에서 ... 는 네임 스페이스 에서 MSStorageDriver_FailurePredictStatus왕조에 MSStorageDriver있으며 root\wmi( root\cimv2클래스 win32_diskdrve가 존재하는 위치 와 구분되고 구별됩니다 ) 상속에서 클래스가 아닌 특정 속성입니다. 는 MSStorageDriver그것의 데이터가 하드웨어 (NO 공급자)에서 직접 가져옵니다. 등의 경우 win32_diskdrive그 자체가 PNPDeviceID공급자를 사용하여 속성을 Win32_DiskDrivePhysicalMedia. 둘 다 하드웨어에서 동일한 데이터를 쿼리하지만 별도로 데이터를 쿼리합니다.

위의 스크립트 InstanceName는 다음과 PNPDeviceID같습니다.

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

결론

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

다음과 같은 데이터를 얻습니다.

(gwmi -Class Win32_DiskDrive).PNPDeviceID

주석 참조

이 섹션에는이 답변의 주석 섹션에서 추가 정보를 참조하기위한 링크가 포함되어 있습니다.

장치 트리

인스턴스 ID


호기심으로, "_0"이 InstanceName 속성에 접미사 인 이유를 알고 있습니까? 처음에는 색인 번호라고 생각했지만 편집 한 결과에 해당하지 않는 것으로 나타났습니다.
red888

1
하드웨어 ID 뒤의 해당 데이터 세트는 instance-specific-IDDevice Instance ID 라고도합니다 . PnP 관리자는 장치 트리의 각 "devnode"에 고유 식별자를 할당합니다. devnode는 여러 장치를 가질 수 있으므로 PnP 관리자에 고유하도록 장치를 인덱싱합니다. 이것이에 _X가 추가 된 이유 입니다. 나는 당신이 그것을 선택한다면, 당신이 이것을 더 탐구하는 데 도움이되는 몇 가지 링크로 원래의 대답을 편집 할 것입니다. Device Instance ID
Colyn1337

1

원격 컴퓨터의 로컬 관리자 그룹의 구성원 인 도메인 계정을 사용하여 원격 WMI 네임 스페이스에 연결하면 UAC 토큰 필터링 이 적용되지 않습니다 .

connect라고 말할 때 Get-WMIObject에 -computer 매개 변수를 지정하면 알 수 있습니다. (별칭 팬이 아니라 죄송합니다. 가독성과 유지 관리 기능을 크게 좋아합니다!).


당신의 권리는 내가 틀렸다. 이 값은 -computer 매개 변수와 함께 표시되지만 신뢰할 수 없음을 확인했습니다. 일부 시스템의 디스크에는 아직 SMART 값 (10)이 없지만이 동일한 시스템에는 SMART 값 (10)이 표시됩니다. MSStorageDriver_FailurePredictStatus 보고서 SMART가 동일한 드라이브에 대해 활성화되었습니다.
red888
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.