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 相关文章推荐
?牟┛途W扣了一??效果出?? target=
May 27 Javascript
JS+css 图片自动缩放自适应大小
Aug 08 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
Mar 12 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
May 10 Javascript
获取jqGrid中选择的行的数据
Nov 30 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
layui的面包屑或者表单不显示的解决方法
Sep 05 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 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
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
Prototype Object对象 学习
2009/07/12 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
《晚上的太阳》教学反思
2014/04/23 职场文书
小学运动会口号
2014/06/07 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python