Some tips of wmi scripting in jscript (1)_Javascript教程-查字典教程网
Some tips of wmi scripting in jscript (1)
Some tips of wmi scripting in jscript (1)
发布时间:2016-12-30 来源:查字典编辑
摘要:集合的概念在windows脚本中很常用,尤其是在wmi方面的脚本中基本都会遇到集合操作。在vbscript里遍历集合的方法很简单,ForEa...

集合的概念在windows脚本中很常用,尤其是在wmi方面的脚本中基本都会遇到集合操作。

在vbscript里遍历集合的方法很简单,ForEach循环就可以达到目的。但是在jscript中

如何使用集合,却困扰了我很长时间,连msdn中都找不到好的例子,令我一度悲观的认为

jscript不能进行集合操作。

在我几乎快要放弃的时候,又翻出一本vbscriptwmi的电子书看了看,竟然找到了jscript

使用集合的方法,那就是Enumerator对象,该对象专门用作枚举集合。看到这个对象你会

想到什么?是不是觉得很眼熟?如果你用jscript调用过FSO的话,如何枚举DrivesFiles

和Folders的?FSO的例子里写的明明白白,当时使用的时候是否行尸走肉般的把例子搬到

你的程序里?当时也会觉得奇怪它为什么遍历一个集合要写这么麻烦,可是就是没有深究

为什么要这样写,那时因为你对数组的那套行不通,jscript中遍历集合只能如此。

这时候你可能还是有疑问,集合和数组有什么差别?引用MS脚本帮助里的原话:集合与数

组的不同点在于集合的成员不能直接访问。不像处理数组时使用下标,这只能将当前项目

指针移动到集合下一或前一元素。这里你想的深入一点,可以这样理解,数组就相当于c

语言中的数组概念,是线性存储空间,可以通过下标很方便的访问,而集合则是一种复杂

的数据结构,比如是一个链表,你访问的话只能通过结点之间的指向关系来访问前一个或

者后一个元素。

Enumerator的用法很简单,把你要遍历集合作为参数传递给Enumerator对象的构造函数后,

你可以枚举集合的成员,atEnd方法判断是否已经到结尾,moveFirst方法可以把指针移动

到第一个元素,moveNext方法把当前的指针位置移动到下一个元素,通过item方法返回集

合中的单个元素。

例1:枚举所有的驱动器

/**//*

*cscriptListDrive.js

*/

varoFSO=newActiveXObject("Scripting.FileSystemObject");

varenDrives=newEnumerator(oFSO.Drives);

varoDrive;

while(!enDrives.atEnd()){

oDrive=enDrives.item();

if(oDrive.IsReady){

WScript.Echo(oDrive.DriveLetter+":");

}

enDrives.moveNext();

}

例2:通过wmi枚举所有的进程

/**//*

*cscriptListProcess.js

*/

varsComputerName=".";

varoLoc=newActiveXObject("WbemScripting.SWbemLocator");

varoSvc=oLoc.ConnectServer(sComputerName,"rootcimv2");

varcolItems=oSvc.ExecQuery("SELECT*FROMWin32_Process");

varenProcesses=newEnumerator(colItems);

while(!enProcesses.atEnd()){

WScript.Echo(enProcesses.item().Name);

enProcesses.moveNext();

}

前几天还和Long同学讨论vbscript和jscript之间的优劣,vbscript在语言功能和代码风

格上比jscript要差很多,但是jscript也有些功能实现上的缺憾,比如没有办法进行字节

操作,但是总的来说jscript是一个聪明的语言,从Enumerator就可以看出这一点,赫赫。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类