powershell:リモートマシンでSMARTが有効になっているかどうかを確認する方法


8

win32_diskdriveクラスを使用して、ドライブでSMARTが有効になっているかどうかなど、リモートマシンのディスク情報を取得しようとしました。

これは思ったよりトリッキーです。ステータスプロパティを読み取るのは簡単ですが、Capabilitiesプロパティで興味深いもの、つまり「SMART Notification」が利用可能かどうかを示す値を発見しました。この値は、コマンドが昇格されたセキュリティコンテキストで実行されない限り表示されません。したがって、たとえば(gwmi win32_diskdrive).Capabilitiesを実行した場合、SMART値(10)は値の配列にまだ表示されません。昇格したプロンプトで実行した場合は表示されます。私が知る限り、昇格されたコンテキストでwinrmセッションを実行することはできません(そして、私は安っぽいschtasksハックやpsexecには興味がありません)。

それで、私はwin32_diskdriveをMSStorageDriver_FailurePredictStatusクラスにマップしようとしました。SMARTがCapabilitiesプロパティに表示されていても、必ずしも有効になっているとは限らないので、とにかくこれを行う必要があると思います。

win32_diskdriveのPNPDeviceIDプロパティをMSStorageDriver_FailurePredictStatusのInstanceNameプロパティにマッピングしていましたが、InstanceNameプロパティはこれが機能するのに十分なほど一意ではないと思います。たとえば、これは私のInstanceNameです。IDE\DiskST3250312AS_____________________________JC47____\5&350bf0c3&0&0.0.0_0

インターフェースタイプ(IDE)、モデル番号(ST3250312AS)、ファームウェアバージョン(JC47)、ある種の一意の識別子(5&350bf0c3&0&0.0.0)、インデックス番号(_0)のようなものを示しています。グーグルする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 \ PNPDeviceIDsが見つかりました。

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

だれもこれを最終的に確認できない場合は、この値が実際には一意であると仮定し、これを「回答」としてマークします。

回答:


5

「2つに分かれる前の道が3つ目の道を進んだら…」〜Telaxianことわざ

脚本

これは、複数のマシンから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&...

スクリプトのメモ: テキストファイルには、1行に1つのホスト名がリストされています。データを区切るカンマはありません。また、スマート対応ドライブを備えていないコンピューターはレポートに表示されません。選択するデータオプションを増やしてレポートをカスタマイズSelect *し、スクリプトで使用したオプションの代わりにを実行して、完全なダンプを表示できます。

Win32_diskdriveとMSStorageDriver_FailurePredictStatus

win32_diskdrivevs MSStorageDriver_FailurePredictStatusプロパティの問題について...これMSStorageDriver_FailurePredictStatusMSStorageDriverroot\wmiネームスペース(root\cimv2クラスwin32_diskdrveが存在する場所とは別であり、区別されます)の王朝の中にあり、継承からのクラス固有ではないプロパティです。MSStorageDriverそれのデータは、ハードウェア(無プロバイダ)から直接取得します。プロバイダーを使用する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

Getと同じデータ:

(gwmi -Class Win32_DiskDrive).PNPDeviceID

コメント参照

このセクションには、この回答のコメントセクションからの追加情報を参照するためのリンクが含まれています。

デバイスツリー

インスタンスID


好奇心から、InstanceNameプロパティに「_0」が付いている理由がわかりますか?最初はインデックス番号だと思っていましたが、私の編集によると、そうではないようです。
red888 2013年

1
ハードウェアIDの後のデータのセットは、インスタンス固有 IDとDevice Instance IDも呼ばれます。PnPマネージャーは、デバイスツリー内の各「devnode」に一意の識別子を割り当てます。Devnodeは複数のデバイスを持つことができるため、PnPマネージャーに固有になるようにデバイスにインデックスを付けます。このため、_Xがに追加されますDevice Instance ID。元の回答をいくつかのリンクを使用して編集します。このリンクをさらに探索するのに役立つはずです(そうすることを選択した場合)。
Colyn1337 2013年

1

リモートコンピューターのローカル管理者グループのメンバーであるドメインアカウントを使用してリモートWMI名前空間に接続する場合、UACトークンフィルター有効になりません

私は、接続と言うとき、私は指定することによって、意味-computerのパラメータには、Get-WmiObjectコマンド(エイリアスの申し訳ありませんが、ないファン-私は可読性と保守性を超える大ファンです!)。


あなたの権利私は間違っていました。値は-computerパラメーターで表示されますが、信頼性が低いこともわかりました。SMART値(10)は一部のマシンのディスクにはまだ存在しませんが、同じマシン上にあります。MSStorageDriver_FailurePredictStatusは、これらの同じドライブに対してSMARTがアクティブであることを報告します。
red888 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.