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 相关文章推荐
SUN的《AJAX与J2EE》全文译了
Feb 23 Javascript
jquery 延迟执行实例介绍
Aug 20 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
vue-awesome-swiper滑块插件使用方法详解
Nov 27 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
JS实现联想、自动补齐国家或地区名称的功能
Jul 07 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
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
tornado 多进程模式解析
2018/01/15 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
int在python中的含义以及用法
2019/06/27 Python
Pandas中resample方法详解
2019/07/02 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
入党自我评价优缺点
2014/01/25 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
物理学专业求职信
2014/07/04 职场文书
爱牙日活动总结
2014/08/29 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
优秀班主任材料
2014/12/16 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
开学第一周值周总结
2015/07/16 职场文书
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers