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 相关文章推荐
JS类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
jquery插件 autoComboBox 下拉框
Dec 22 Javascript
Dom操作之兼容技巧分享
Sep 20 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
Nov 26 Javascript
JavaScript代码实现左右上下自动晃动自动移动
Apr 08 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
VUE动态生成word的实现
Jul 26 Javascript
Vue性能优化的方法
Jul 30 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
vue页面加载闪烁问题的解决方法
2018/03/28 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python中的模块和包概念介绍
2015/04/13 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Numpy 多维数据数组的实现
2020/06/18 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
文员试用期转正自我鉴定
2014/09/14 职场文书
授权收款委托书范本
2014/10/10 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL