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 相关文章推荐
33种Javascript 表格排序控件收集
Dec 03 Javascript
用js模拟struts2的多action调用示例
May 19 Javascript
微信小程序 教程之数据绑定
Oct 18 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
Oct 25 Javascript
webpack 插件html-webpack-plugin的具体使用
Apr 09 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
微信小程序上传多图到服务器并获取返回的路径
May 05 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
js 实现watch监听数据变化的代码
Oct 13 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 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
PHP生成月历代码
2007/06/14 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php字符集转换
2017/01/23 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
php中数组最简单的使用方法
2020/12/27 PHP
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
深入了解JavaScript代码覆盖
2019/06/13 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
基于python实现微信模板消息
2015/12/21 Python
python中set()函数简介及实例解析
2018/01/09 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
Servlet如何得到服务器的信息
2015/12/22 面试题
初三学习决心书
2014/03/11 职场文书
中秋寄语大全
2014/04/11 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
青年文明号口号
2014/06/17 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
村级四风对照检查材料
2014/08/24 职场文书
副校长个人对照检查材料思想汇报
2014/10/04 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python