Some tips of wmi scripting in jscript (1)


Posted in Javascript onApril 03, 2007

集合的概念在windows脚本中很常用,尤其是在wmi方面的脚本中基本都会遇到集合操作。
在vbscript里遍历集合的方法很简单,For Each循环就可以达到目的。但是在jscript中
如何使用集合,却困扰了我很长时间,连msdn中都找不到好的例子,令我一度悲观的认为
jscript不能进行集合操作。

在我几乎快要放弃的时候,又翻出一本vbscript wmi的电子书看了看,竟然找到了jscript
使用集合的方法,那就是Enumerator对象,该对象专门用作枚举集合。看到这个对象你会
想到什么?是不是觉得很眼熟?如果你用jscript调用过FSO的话,如何枚举Drives Files
和Folders的?FSO的例子里写的明明白白,当时使用的时候是否行尸走肉般的把例子搬到
你的程序里?当时也会觉得奇怪它为什么遍历一个集合要写这么麻烦,可是就是没有深究
为什么要这样写,那时因为你对数组的那套行不通,jscript中遍历集合只能如此。

这时候你可能还是有疑问,集合和数组有什么差别?引用MS脚本帮助里的原话:集合与数
组的不同点在于集合的成员不能直接访问。不像处理数组时使用下标,这只能将当前项目
指针移动到集合下一或前一元素。这里你想的深入一点,可以这样理解,数组就相当于c
语言中的数组概念,是线性存储空间,可以通过下标很方便的访问,而集合则是一种复杂
的数据结构,比如是一个链表,你访问的话只能通过结点之间的指向关系来访问前一个或
者后一个元素。

Enumerator的用法很简单,把你要遍历集合作为参数传递给Enumerator对象的构造函数后,
你可以枚举集合的成员,atEnd方法判断是否已经到结尾,moveFirst方法可以把指针移动
到第一个元素,moveNext方法把当前的指针位置移动到下一个元素,通过item方法返回集
合中的单个元素。

例1:枚举所有的驱动器

/**//*
* cscript ListDrive.js
*/
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var enDrives = new Enumerator(oFSO.Drives);
var oDrive;
while (! enDrives.atEnd()) {
    oDrive = enDrives.item();

    if (oDrive.IsReady) {
        WScript.Echo(oDrive.DriveLetter + ":");
    }

    enDrives.moveNext();
}
例2:通过wmi枚举所有的进程

/**//*
* cscript ListProcess.js
*/
var sComputerName = ".";
var oLoc = new ActiveXObject("WbemScripting.SWbemLocator");
var oSvc = oLoc.ConnectServer(sComputerName, "root\\cimv2");
var colItems = oSvc.ExecQuery("SELECT * FROM Win32_Process");
var enProcesses = new Enumerator(colItems);

while (! enProcesses.atEnd()) {
    WScript.Echo(enProcesses.item().Name);
    enProcesses.moveNext();
}

前几天还和Long同学讨论vbscript和jscript之间的优劣,vbscript在语言功能和代码风
格上比jscript要差很多,但是jscript也有些功能实现上的缺憾,比如没有办法进行字节
操作,但是总的来说jscript是一个聪明的语言,从Enumerator就可以看出这一点,赫赫。

Javascript 相关文章推荐
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
轻松学习Javascript闭包函数
Dec 15 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
angularjs 的数据绑定实现原理
Jul 02 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
vue中提示$index is not defined错误的解决方式
Sep 02 Javascript
原生JS实现音乐播放器的示例代码
Feb 25 Javascript
记录几个javascript有关的小细节
Apr 02 #Javascript
新浪刚打开页面出来的全屏广告代码
Apr 02 #Javascript
js prototype 格式化数字 By shawl.qiu
Apr 02 #Javascript
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 #Javascript
新浪中用来显示flash的函数
Apr 02 #Javascript
我也种棵OO树JXTree[js+css+xml]
Apr 02 #Javascript
javascript中获取选中对象的类型
Apr 02 #Javascript
You might like
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
php输出形式实例整理
2020/05/05 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python变量和字符串详解
2017/04/29 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
岗位职责的含义
2013/11/17 职场文书
施工协议书范本
2014/04/22 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
中标通知书
2015/04/17 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python
MySQL 逻辑备份 into outfile
2022/05/15 MySQL