Windows VistaとWMI CIM_DataFileクラス
先日採り上げたWMI CIM_DataFileクラスへのクエリでファイルシステム中の全ファイルを列挙するスクリプトの例だが、Windows Vistaで動かすとこちらも上手く動かないことが判明した。
var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2"); var colFiles = objWMIService.ExecQuery("Select Name, Path from CIM_DataFile"); var enumItems = new Enumerator(colFiles); var match = 0; for (; !enumItems.atEnd(); enumItems.moveNext()) { var objFile = enumItems.item(); if ( objFile.Name.match(prohibPattern)) { WScript.Echo("該当するファイルが見つかりました : " + objFile.Name + "\t" + objFile.Path); } }
実際に動かすとWindows Vistaではファイルシステム全てをパースすることができず、ルートドライブの一部のファイルしか列挙されなかった。(私の環境では980個のファイルしか対象にならなかった)
CIM_DataFile/ MSDN WMI References
Win32_Product/ MSDN WMI References
両クラスともRequirementsにはWindows Vistaも含まれているんだけどな。
これが仕様かバグかはまだ解らないが、Windows VistaのRoot\CIMV2名前空間への互換性って酷くないか。
Windows VistaではWMIではなくPowershellが推奨されることと、私の周りのシステム管理者が何故Windows Vistaを嫌うのが解ったような気がする。