Win32_diskdriveクラスを使用して、ドライブでSMARTが有効になっているかどうかなど)を含む、リモートマシンのディスク情報を取得しようとしました。
これは思ったよりトリッキーです。ステータスプロパティを読み取るのは非常に簡単ですが、Capabilitiesプロパティで興味深いもの、つまり「SMART Notification」が利用可能かどうかを示す値を発見しました。この値は、コマンドが上位のセキュリティコンテキストで実行されない限り表示されません。したがって、たとえば(gwmi win32_diskdrive).Capabilitiesを実行すると、SMART value(10)は値の配列にまだ表示されませんが、昇格したプロンプトで実行すると表示されます。昇格したコンテキストでwinrmセッションを実行できないことはわかっています(そして、私は安っぽいschtasksハックや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)のようなものを示しています。グーグル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
だれもこれを最終的に確認できない場合、1日かそこらで、この値は実際には一意であると想定し、これを「回答」としてマークします。
「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&...
Script Notes:テキストファイルに、1行に1つのホスト名がリストされています。データを区切るカンマはありません。また、スマート対応ドライブを備えていないコンピューターはレポートに表示されません。選択するデータオプションを増やしてレポートをカスタマイズできます。スクリプトで使用したオプションの代わりにSelect *
を実行して、完全なダンプを表示できます。
Win32_diskdrive対MSStorageDriver_FailurePredictStatus
win32_diskdrive
対MSStorageDriver_FailurePredictStatus
プロパティの問題について... MSStorageDriver_FailurePredictStatus
は、root\wmi
名前空間(クラスroot\cimv2
が存在するwin32_diskdrve
とは別で区別されます)のMSStorageDriver
の王朝の中にあり、継承からクラス固有のプロパティではありません。 MSStorageDriver
は、データをハードウェアから直接取得します(プロバイダーなし)。 win32_diskdrive
には、プロバイダーWin32_DiskDrivePhysicalMedia
を使用する独自のPNPDeviceID
プロパティがあります。どちらもハードウェアから同じデータをクエリしますが、個別にクエリします。
上記の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
コメント参照
このセクションには、この回答のコメントセクションからの追加情報を参照するためのリンクが含まれています。
リモートコンピューターのローカル管理者グループのメンバーであるドメインアカウントを使用してリモートWMI名前空間に接続する場合、UACトークンフィルター すべきではない 有効になります。
私が接続すると言うときは、 -コンピューター パラメータ Get-WMIObject (申し訳ありませんが、エイリアスのファンではありません-私は読みやすさと保守性の大ファンです!).