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 相关文章推荐
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
js调用图片隐藏&显示实现代码
Sep 13 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
详解JavaScript中的客户端消息框架设计原理
Jun 24 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
实例解析ES6 Proxy使用场景介绍
Jan 08 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
JavaScript实现矩形块大小任意缩放
Aug 25 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
记录几个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中的unicode和utf8编码
2015/06/10 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
javascript Array.remove() 数组删除
2009/08/06 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
2013/07/09 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
机修工岗位职责
2013/11/24 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
科技节口号
2014/06/19 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
贷款工资证明范本
2015/06/12 职场文书
党章学习心得体会2016
2016/01/14 职场文书
个人道歉信大全
2019/04/11 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA