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 相关文章推荐
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
IFrame跨域高度自适应实现代码
Aug 16 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
Dec 06 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
Oct 09 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 Javascript
JS co 函数库的含义和用法实例总结
Apr 08 Javascript
antd配置config-overrides.js文件的操作
Oct 31 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+SqlServer实现分页显示
2006/10/09 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
js读取配置文件自写
2014/02/11 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
python中类的属性和方法介绍
2018/11/27 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
numpy库reshape用法详解
2020/04/19 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
卫校中专生的自我评价
2014/01/15 职场文书
政治表现评语
2014/05/04 职场文书
房地产推广策划方案
2014/05/19 职场文书