WSH(JScript)用WMIライブラリ:WMIUtility.js

WSH(JScript)用のWMI(Windows Management Instrumentation)ライブラリです。
機能概要は、以下の通りです。

  • wmiObjectの取得
  • wmiObjectをObject化して取得

サンプル

wmi.wsf<?xml version="1.0" encoding="UTF-16" standalone="yes" ?>
<package>
  <job>
    <?job error="false" debug="true" ?>
    <script language="JavaScript" src="../common/WMIUtility.js"/>
    <script language="JavaScript"><![CDATA[
(function() {
  "use strict";

  function main() {
    var stdout = [];

    var props = WMIUtility.getProperties("SELECT * FROM Win32_Process");
    for (var i=0; i<props.length; i++) {
      stdout.push(props[i].Name + ': ' + props[i].ProcessId);
    }

    // プロセス名とプロセスIDを出力する
    WScript.Echo(stdout.join('\n'));

    WMIUtility.quit();
  }

  main();
})();
    ]]></script>
  </job>
</package>

参考リンク

WMIUtility.js

GitHubで公開しました。最新版は、k08045kk/WSHLibraryから取得してください。

WMIUtility.js/*!
 * WMIUtility.js v1
 *
 * Copyright (c) 2018 toshi
 * Released under the MIT license.
 * see https://opensource.org/licenses/MIT
 */

/**
 * WSH(JScript)用WMIライブラリ
 * WMI(Windows Management Instrumentation)
 * @requires    module:ActiveXObject("WbemScripting.SWbemLocator")
 * @auther      toshi(https://www.bugbugnow.net/)
 * @license     MIT License
 * @version     1
 */
(function(global, factory) {
  if (!global.WMIUtility) {
    global.WMIUtility = factory();
  }
})(this, function() {
  "use strict";

  var _this = void 0;

  /**
   * PrivateUnderscore.js
   * @version   4
   */
  {
    function _isString(obj) {
      return Object.prototype.toString.call(obj) === '[object String]';
    };
    function _isArray(obj) {
      return Object.prototype.toString.call(obj) === '[object Array]';
    };
  }

  /**
   * コンストラクタ
   */
  _this = function WMIUtility_constructor() {};

  _this.locator = new ActiveXObject("WbemScripting.SWbemLocator");
  _this.service = _this.locator.ConnectServer();


  /**
   * 終了化
   * 終了化後、クラス内の変数/関数にアクセスしないこと。
   */
  _this.quit = function WMIUtility_quit() {
    _this.service = null;
    _this.locator = null;
  };

  /**
   * 選択
   * 配列の最初の要素を返す。
   * @param {string} query - クエリ
   * @return {wmiObject} アイテム
   */
  _this.select = function WMIUtility_select(query) {
    var items = _this.selects(query);
    return (items.length != 0)? items[0]: null;
  };

  /**
   * 選択
   * @param {string} query - クエリ
   * @return {wmiObject[]} アイテム配列
   */
  _this.selects = function WMIUtility_selects(query) {
    var ret = [];
    var set = _this.service.ExecQuery(query);
    for (var e=new Enumerator(set); !e.atEnd(); e.moveNext()) {
      ret.push(e.item());
    }
    set = null;
    return ret;
  };

  /**
   * プロパティ一覧
   * @param {(string|wmiObject)} query - クエリ or アイテム
   * @return {Object} アイテムプロパティのオブジェクト({Name: Value, ...})
   */
  _this.getProperty = function WMIUtility_getProperty(query) {
    var ret = null;

    if (_isString(query)) {      // クエリを処理する
      var set = _this.service.ExecQuery(query);
      for (var e=new Enumerator(set); !e.atEnd(); e.moveNext()) {
        query = e.item();
        break;
      }
      set = null;
    }
    if (query != null) {        // アイテムを処理する
      ret = {};
      for (var e=new Enumerator(query.Properties_); !e.atEnd(); e.moveNext()) {
        var item = e.item();
        ret[item.Name] = item.Value;
      }
    }
    return ret;
  }

  /**
   * プロパティ一覧
   * @param {(string|wmiObject[])} query - クエリ or アイテム配列
   * @return {Object[]} アイテムプロパティのオブジェクト([{Name: Value, ...}, ...])
   */
  _this.getProperties = function WMIUtility_getProperties(query) {
    var ret = null;

    if (_isString(query)) {      // クエリを処理する
      query = _this.selects(query);
    }
    if (_isArray(query)) {       // アイテム配列を処理する
      ret = [];
      for (var i=0; i<query.length; i++) {
        ret.push(_this.getProperty(query[i]));
      }
    }
    return ret;
  };

  return _this;
});

変更履歴

更新日内容
2018/07/02v1 - add - 初版