2019/02/17 追記
無事ケアレスミスに気づき解決しました。こちらを参照ください。
WMIを使いPCの情報を表示するような HTAを作成しているが、CIM_DataFileがなぜか JScriptで取得できなくて困っている。別の方法で回避する為、調査を一度打ち切るので忘れないようにメモしておく。
過去に WMIを JScriptで扱う記事を書いてきました。
今回は、インストールされているアプリケーションのバージョンが取得したいなと思い、CIM_DataFileを使用する事にしましたが、どうにもこうにもJScriptで動作しない...
var query = "SELECT * FROM CIM_DataFile WHERE Name = 'D:\\IMG_0375.JPG'";
var props = getWMIProperties(query);
for( var i = 0 ; i < props.length ; ++i ){
var file = props[i];
// "d:\img_0375.jpg" と表示される事を期待
WScript.echo( file.Name );
}
VBScriptのサンプルを使いWSHを作成し実行すると
以下のように正しく取得出来る事を確認出来た。
cscript data_file_vbs.wsf
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
ファイルの作成日/更新日です。
ファイル名: d:\img_0375.jpg
作成日時: 20181230233812.410000+***
更新日時: 20181224201712.000000+***
アクセス日時: 20190211000000.000000+***
変数定義の方法や文字列の扱い等など変更し、JScriptのコードに置き換えましたが取得できない...
VBScript( 取得できる )
'ローカルコンピュータに接続する。
Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = oLocator.ConnectServer
'クエリー条件を WQL にて指定する。
Set oClassSet = oService.ExecQuery("Select * From CIM_DataFile Where Name = 'D:\\IMG_0375.JPG'")
JScript (取得できない)
// ローカルコンピュータに接続する。
var oLocator = WScript.CreateObject("WbemScripting.SWbemLocator");
var oService = oLocator.ConnectServer();
// クエリー条件を WQL にて指定する。
var oClassSet = oService.ExecQuery("Select * From CIM_DataFile Where Name = 'D:\\IMG_0375.JPG'");
ん~... いったん PowserShell か、 WMICを使った出力結果をパースして使用するか
2019/02/12 追記
解決した!!まったく気づかなかったですが、ご指摘頂きあっさり解決しました。
// ローカルコンピュータに接続する。
var oLocator = WScript.CreateObject("WbemScripting.SWbemLocator");
var oService = oLocator.ConnectServer();
// クエリー条件を WQL にて指定する。
var oClassSet = oService.ExecQuery("Select * From CIM_DataFile Where Name = 'D:\\\\IMG_0375.JPG'");
Whereに指定してある 「¥」は2個重ねないといけないので、JScriptだと4個か...
Where Name = 'D:\\\\IMG_0375.JPG'
なんともお恥ずかしい感じでしたが指摘頂き本当に感謝です。
ありがとうございました。