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 相关文章推荐
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
May 14 Javascript
基于jquery的blockui插件显示弹出层
Apr 14 Javascript
js代码验证手机号码和电话号码是否合法
Jul 30 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
Oct 28 Javascript
JS之相等操作符详解
Sep 13 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
微信小程序 欢迎界面开发的实例详解
Nov 30 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
jquery实现吸顶导航效果
Jan 08 jQuery
vue动态设置页面title的方法实例
Aug 23 Javascript
jQuery插件实现图片轮播效果
Oct 19 jQuery
vue在图片上传的时候压缩图片
Nov 18 Vue.js
记录几个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
php 操作符与控制结构
2012/03/07 PHP
php实现上传图片文件代码
2015/07/19 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
Python正则表达式教程之一:基础篇
2017/03/02 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
毕业生自荐书
2013/12/18 职场文书
上课迟到检讨书
2014/01/19 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
市场部岗位职责范本
2015/04/15 职场文书
解除处分决定书
2015/06/25 职场文书
《西门豹》教学反思
2016/02/23 职场文书
Python Parser的用法
2021/05/12 Python