WMIのCMI_DataFileの挙動ががJScriptとVBScriptで違う?

更新日:

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'

なんともお恥ずかしい感じでしたが指摘頂き本当に感謝です。
ありがとうございました。

-JavaScript
-, , ,

Copyright© 打ち聞かせ , 2024 All Rights Reserved Powered by STINGER.