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 相关文章推荐
javascript 表单的友好用户体现
Jan 07 Javascript
JS 对输入框进行限制(常用的都有)
Jul 30 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
AngularJs concepts详解及示例代码
Sep 01 Javascript
浅谈struts1 & jquery form 文件异步上传
May 25 jQuery
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 Javascript
Vue开发之封装上传文件组件与用法示例
Apr 25 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 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
ip签名探针
2006/10/09 PHP
php include,include_once,require,require_once
2008/09/05 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python笔试面试题小结
2019/09/07 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
买房委托公证书
2014/04/08 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android