• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

深入理解VBScript
2012-11-20 @ TECH ActiveXCOMOLEVBSCript宿主

一、什么是 VBS?

参考资料: http://en.wikipedia.org/wiki/VBScript

VBScript (Visual Basic Scripting Edition) is an Active Scripting language developed by Microsoft that is modeled on Visual Basic.
It is designed as a “lightweight” language with a fast interpreter for use in a wide variety of Microsoft environments.
VBScript uses the Component Object Model to access elements of the environment within which it is running;
for example, the FileSystemObject (FSO) is used to create, read, update and delete files.
VBScript has been installed by default in every desktop release of Microsoft Windows since Windows 98; in Windows Server since Windows NT 4.0 Option Pack;
and optionally with Windows CE (depending on the device it is installed on).
A VBScript script must be executed within a host environment, of which there are several provided with Microsoft Windows, including:
Windows Script Host (WSH),
Internet Explorer (IE),
Internet Information Services (IIS).
Additionally, the VBScript hosting environment is embeddable in other programs, through technologies such as the Microsoft Script Control (msscript.ocx).

简单来说:

(1) VBS是精简版的VB, 易上手更灵巧,但也受到诸多限制。

但在权限允许的情况下,可以通过 COM 的调用来完善和实现更多的功能。

比如: VB 你可以直接读写文件,但是VBS就不可以,但是可以通过调用系统 FSO 来实现文件读写操作

(2) VBS的运行必须要有宿主环境,常见的就只有3个: WIN系统端、IE浏览器端、WEB服务器端

不同的宿主环境对于脚本的支持和限制也不各不同。

比如:
在系统端的 VBS 当你以 Administrators 登录系统的时候,可以通过 MsgBox函数 弹出跟VB 一样的一个对话框

在IE浏览器端你也可以

在服务器端 MsgBox 就不被支持

(3) COM / OLE / ActiveX 释疑

参见 科普:COM 与 ActiveX / OLE

二、VBS 能做什么?

1、系统的管理/维护

VBS + WMI

2、通过调用COM实现其他功能

VBS + ActiveX

所以如果要问VBS到底能做什么

首先要看你给了VBS什么样的支持

如果只是系统默认的支持库,那么就只能做那些

如果你提供了更强大的支持库,那么VBS可以做的更多

VBS以简单灵活著称,所以当你要写大型的程序最好不要用VBS,因为得不偿失

3、那么问题来了

在系统默认的支持库下 VBS 可以做什么呢?

换句话说 VBS 可以调用那些组件呢?

也就是说默认的windows下到底有哪些COM?

进一步的 windows下的这么多COM里 多少可以被VBS 直接调用?

这个问题 一步一步的就得到解答了

[3.1] a list of COMs in windows by default

WMI \ Win32_COMClass
可以从WMI官方示例文档中得到, 下面是我做的精简版, 写本文档时 6091 个类

'----------Get All COM ClassName----------
 On Error Resume Next
 strComputer = "."
 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
 Set colItems = objWMIService.ExecQuery("Select * from Win32_COMClass",,48)
 i=0
 For Each objItem in colItems
 i=i+1
 Wscript.Echo i & ": " & objItem.Caption
 Next
 '----------EOF----------

[3.2] 开发语言的潜力

当你学习一门语言时肯定想这门语言越强大越好,最好是万能的,实际上没有那种语言在所有方向都是最强的

当你使用时,知道自己的需求更重要,然后从上面的列表里面找到相关的对象 调用即可

另外提醒自己一点

用一个工具就是要用它最强项的地方,比如你用小刀小铅笔是因为小而灵活容易携带,你不会小刀去做家具,虽然有足够的时间和精力你最终能做出来

VBS的强项是 易用 灵活,随意用 随时改 不用编译

且可以顺手用系统自带的强大的ActiveX 和 WMI

三、总结

总而延迟,VBS是一款轻量级的脚本语言,他所实现的功能都是宿主和系统COM给提供的

到底VBS做到什么程度归根结底还是看代码作者对宿主和系统COM接口的了解程度

同时要注意的是有些什么VBS的效率并不高,特别是有大量数据,比如枚举、文件列表等等的时候效率确实比较低

下一篇:   CentOS VPS定时检测剩余内存、系统负载重启服务脚本
上一篇:   科普:COM 与 ActiveX / OLE
暂无评论

Cancel reply