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