vbs教程(vbs教程pdf)

软件教程 2023.05.06 126

目录:

VBS详细教程

VBS 取得本机IP

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set IPConfigSet = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

For Each IPConfig in IPConfigSet

If Not IsNull(IPConfig.IPAddress) Then

For Each strAddress in IPConfig.IPAddress

WScript.Echo strAddress

Next

End If

Next

2 取得本机计算机名

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")

For Each objComputer in colComputers

Wscript.Echo objComputer.Name

Next

--------------------------------------------------------------------------------

4 检查升级包

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems

Wscript.Echo objOperatingSystem.ServicePackMajorVersion "." objOperatingSystem.ServicePackMinorVersion

Next

--------------------------------------------------------------------------------

5 检查 Hot Fix

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colQuickFixes = objWMIService.ExecQuery ("Select * from Win32_QuickFixEngineering")

For Each objQuickFix in colQuickFixes

Wscript.Echo "Description: " objQuickFix.Description

Wscript.Echo "Hot Fix ID: " objQuickFix.HotFixID

Next

--------------------------------------------------------------------------------

6 检查本地管理员数目

Set objNetwork = CreateObject("Wscript.Network")

strComputer = objNetwork.ComputerName

Set objGroup = GetObject("WinNT://" strComputer "/Administrators,group")

For Each objUser in objGroup.Members

Wscript.Echo objUser.Name

Next

--------------------------------------------------------------------------------

7 磁盘系统

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3")

For Each objDisk in colDisks

Wscript.Echo "Disk drive: " objDisk.DeviceID " -- " objDisk.FileSystem

Next

--------------------------------------------------------------------------------

8 检测自动登录是否开启

Const HKEY_LOCAL_MACHINE = H80000002

strComputer = "."

Set objReg=GetObject("winmgmts:\\" strComputer "\root\default:StdRegProv")

strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon"

strValueName = "AutoAdminLogon"

objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName,dwValue

If dwValue = 1 Then

Wscript.Echo "Auto logon is enabled."

Else

Wscript.Echo "Auto logon is disabled."

End If

--------------------------------------------------------------------------------

9 关闭自动登录

Const HKEY_LOCAL_MACHINE = H80000002

strComputer = "."

Set objReg=GetObject("winmgmts:\\" strComputer "\root\default:StdRegProv")

strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon"

strValueName = "AutoAdminLogon"

dwValue = 0

oReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, dwValue

--------------------------------------------------------------------------------

10 检查Guest是否禁用

Set objNetwork = CreateObject("Wscript.Network")

strComputer = objNetwork.ComputerName

Set objUser = GetObject("WinNT://" strComputer "/Guest")

If objUser.AccountDisabled Then

Wscript.Echo "The Guest account is disabled."

Else

Wscript.Echo "The Guest account is enabled."

End If

--------------------------------------------------------------------------------

11 关闭Guest

Set objNetwork = CreateObject("Wscript.Network")

strComputer = objNetwork.ComputerName

Set objUser = GetObject("WinNT://" strComputer "/Guest")

If objUser.AccountDisabled Then

Wscript.Echo "The Guest account is already disabled."

Else

objUser.AccountDisabled = True

objUser.SetInfo

Wscript.Echo "The Guest account has been disabled."

End If

--------------------------------------------------------------------------------

12 检索本地共象

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")

For each objShare in colShares

Wscript.Echo "Name: " objShare.Name

Wscript.Echo "Path: " objShare.Path

Wscript.Echo "Type: " objShare.Type

Next

--------------------------------------------------------------------------------

13 脚本检索一个文件夹下.txt文件 汗哦 值得学习

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colFiles = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile WHERE Path = '\\Documents and Settings\\Administrator\\桌面\\' AND Drive = 'E:' AND Extension = 'txt'")

Wscript.Echo "Number of .txt files found: " colFiles.Count

for each aa in colFiles

NL=NL vbcrlf aa.name

next

Wscript.Echo NL

--------------------------------------------------------------------------------

14 我如何向用户显示一个用来选择文件的对话框?

问:

嗨,Scripting Guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用?

-- BF

答:

您好,BF。如果您使用的是 Windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这样的方法。

但如果您使用的是 Windows XP,情况就不同了。在 Windows XP 上,

您可以使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框。可以用类似以下代码的脚本:

Set objDialog = CreateObject("UserAccounts.CommonDialog")

objDialog.Filter = "All Files|*.*" objDialog.InitialDir = "C:\" intResult = objDialog.ShowOpen

If intResult = 0 Then Wscript.Quit Else Wscript.Echo objDialog.FileName End If

这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 UserAccounts.CommonDialog

对象的对象引用(名为“objDialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,

所以我们将筛选设置成这样:

objDialog.Filter = "All Files|*.*"

假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:

objDialog.Filter = "Text Files|*.txt"

您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),

最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用户提供查看所有文件的选项?

那么可以使用以下代码:

objDialog.Filter = "Text Files|*.txt|All Files|*.*"

试一试,您就明白我们的意思了。

然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 C 的根文件夹中的文件,

所以我们这样设置“InitialDir”属性:

objDialog.InitialDir = "C:\"

希望显示 C:\Windows 文件夹中的文件吗?那么可以使用以下代码:

objDialog.InitialDir = "C:\Windows"

不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。

您从 C:\Windows 开始并不意味着您只能打开该文件夹中的文件。

最后,我们使用下面这行代码显示对话框:

intResult = objDialog.ShowOpen

现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单击“取消”,

则变量 intResult 将被设置为 0。在我们的脚本中,我们检查 intResult 的值,如果是 0,

我们将只需要使用 Wscript.Quit 来终止此脚本。

但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intResult 将被设置为 -1,

“FileDialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到类似以下内容的输出:

C:\WINDOWS\Prairie Wind.bmp

不用说,您并不局限于只回显文件路径。实际上,您可以使用 WMI、FileSystemObject 或一些其他技术来绑定该文件,

然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不多都可以对它执行。

但无论如何,您都需要使用脚本。

顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“Ctrl”键选择多个文件。有一种方法可以选择多个文件,

至少在 XP 计算机上可以,但是我们只能将此问题留到以后的专栏中讨论了。

--------------------------------------------------------------------------------

15 我如何确定进程是在哪个帐户下运行的?

问:

嗨,Scripting Guy!我有一个脚本,它返回关于计算机上运行的所有进程的信息,

只是我不知道如何获得这些进程在其下运行的用户帐户的名称。您可以帮助我吗?

-- DL

答:

您好,DL。是的,我们可以帮助您。确定进程是在哪个帐户下运行的,实际上相当简单,

只是如何着手执行此操作并不是特别显而易见的。如果您与大多数人一样,

那么您可能会通过扫描 Win32_Process 类的属性来查找名为 Account 或 UserName 或类似的属性。您很有可能找不到。

出现这种情况的原因是:Win32_Process 没有可以告诉您进程在哪个帐户下运行的属性。

您需要使用“GetOwner”方法来捕捉此信息。下面这个脚本可以告诉您 Microsoft Word (Winword.exe) 在哪个帐户下运行:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'Winword.exe'")

For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " objProcess.Name " is owned by " _ strUserDomain "\" strUserName "."Next

我们最感兴趣的是下面这行代码:

objProcess.GetOwner strNameOfUser, strUserDomain

我们在此所做的就是调用“GetOwner”方法。GetOwner 返回两个“输出参数”,

一个返回负责该进程的用户的名称,一个返回该用户所属的域。为捕获这两个输出参数,我们需要为 GetOwner 方法提供两个变量。

在这个示例脚本中,我们使用了两个分别叫做 strUserName 和 strUserDomain 的变量。名称可以随意选择;您可以将变量称为 A 和 B 或 X 和 Y 或任何其他您想要的名称。

不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域。这意味着,如果您希望用 X 表示用户名,用 Y 表示域,那么您要确保您的代码像下面这行代码一样:

objProcess.GetOwner X, Y

调用 GetOwner 之后,我们就可直接回显进程名和所有者。请注意,我们可以稍微来点儿花样儿 – 使用域\用户格式。这样,我们就可以回显类似于“fabrikam\kenmyer”的名称。

下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者:

strComputer = "."Set objWMIService = GetObject("winmgmts:\\" strComputer "\root\cimv2")

Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process")

For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " objProcess.Name " is owned by " _ strUserDomain "\" strUserName "."Next

可能有人感到奇怪,2005 年 1 月 3 日正好是 Microsoft 员工的正式休息日。

那么今天为什么会有“嗨,Scripting Guy!”专栏?这只能是由于 Microsoft 脚本专家表现出来的对工作的难以置信的奉献和投入精神。

或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以照常来了(而且是在早上 7 点啊!)。

--------------------------------------------------------------------------------

16 可以将脚本的输出复制到剪贴板吗?

问:

嗨,Scripting Guy!有办法将脚本输出复制到剪贴板吗?

-- ZW, Marseilles, France

答:

您好,ZW.如果您不介意用一些疯狂的解决方法,那么实际上将脚本输出复制到剪贴板相当容易。

首先,您需要构造一个字符串,其中包含想要的输出。然后,创建 Internet Explorer 的一个实例,

然后在其中打开一个空白页。接着,利用 Internet Explorer 对象模型的内置功能,将字符串复制到剪贴板;

特别是, 可以使用 clipboardData.SetData 方法来实现这个技巧。将某些数据复制到剪贴板的示例脚本如下:

strCopy = "This text has been copied to the clipboard."

Set objIE = CreateObject("InternetExplorer.Application")

objIE.Navigate("about:blank")

objIE.document.parentwindow.clipboardData.SetData "text", strCopy

objIE.Quit

运行脚本,然后打开 Notepad,然后单击“粘贴”;应该可以看到所复制的字符串。

顺便说一下,所有这一切都是在“幕后”发生的,Internet Explorer 并不会真的出现在屏幕上。

这是因为,在默认情况下,通过脚本创建的任何 IE 实例在运行时都是隐藏的,除非您利用如下语句将其显示出来:

objIE.Visible = True

VBS教程:方法-GetDrive 方法

GetDrive

方法

返回与指定的路径中驱动器相对应的

Drive

对象。

object.GetDrive

drivespec

参数

object

必选项。应为

FileSystemObject

的名称。

drivespec

必选项。drivespec

可以是驱动器号

(c)、带冒号的驱动器号

(c:)、带有冒号与路径分隔符的驱动器号

(c:\)

或任何指定的网络共享

(\\computer2\share1)。

说明

对于网络共享,检查并确保该网络共享存在。

若drivespec与已接受格式不一致或不存在,就会出错。为了在调用

GetDrive

方法时使用标准路径字符串,使用下列序列得到与

drivespec

相匹配的字符串:

DriveSpec

=

GetDriveName(GetAbsolutePathName(Path))

下面示例说明如何使用

GetDrive

方法:

Function

ShowFreeSpace(drvPath)

Dim

fso,

d,

s

Set

fso

=

CreateObject("Scripting.FileSystemObject")

Set

d

=

fso.GetDrive(fso.GetDriveName(drvPath))

s

=

"Drive

"

UCase(drvPath)

"

-

"

s

=

s

d.VolumeName

"BR"

s

=

s

"Free

Space:

"

FormatNumber(d.FreeSpace/1024,

0)

s

=

s

"

Kbytes"

ShowFreeSpace

=

sEnd

Function

VBS教程:函数-IsDate 函数

IsDate

函数

返回

Boolean

值指明某表达式是否可以转换为日期。

IsDate(expression)

expression

参数可以是任意可被识别为日期和时间的日期表达式或字符串表达式。

说明

如果表达式是日期或可合法地转化为有效日期,则

IsDate

函数返回

True;否则函数返回

False。在

Microsoft

Windows

操作系统中,有效的日期范围公元

100

1

1

日到公元

9999

12

31

日;合法的日期范围随操作系统不同而不同。

下面的示例利用

IsDate

函数决定表达式是否能转换为日期型:

Dim

MyDate,

YourDate,

NoDate,

MyCheckMyDate

=

"October

19,

1962":

YourDate

=

#10/19/62#:

NoDate

=

"Hello"MyCheck

=

IsDate(MyDate)

'

返回

True。MyCheck

=

IsDate(YourDate)

'

返回

True。MyCheck

=

IsDate(NoDate)

'

返回

False。

VBS教程:函数-InStr 函数

InStr

函数

返回某字符串在另一字符串中第一次出现的位置。

InStr([start,

]string1,

string2[,

compare])

参数

start

可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果

start

包含

Null,则会出现错误。如果已指定

compare,则必须要有

start

参数。

string1

必选项。接受搜索的字符串表达式。

string2

必选项。要搜索的字符串表达式。

compare

可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。

设置

compare

参数可以有以下值:

常数值描述vbBinaryCompare0执行二进制比较。vbTextCompare1执行文本比较。

返回值

InStr

函数返回以下值:

如果InStr

返回string1

为零长度0string1

NullNullstring2

为零长度startstring2

NullNullstring2

没有找到0在

string1

中找到

string2找到匹配字符串的位置start

Len(string2)0

说明

下面的示例利用

InStr

搜索字符串:

Dim

SearchString,

SearchChar,

MyPosSearchString

="XXpXXpXXPXXP" '

String

to

search

in.SearchChar

=

"P" '

Search

for

"P".MyPos

=

Instr(4,

SearchString,

SearchChar,

1) '

A

textual

comparison

starting

at

position

4.

Returns

6.MyPos

=

Instr(1,

SearchString,

SearchChar,

0) '

A

binary

comparison

starting

at

position

1.

Returns

9.

MyPos

=

Instr(SearchString,

SearchChar) '

Comparison

is

binary

by

default

(last

argument

is

omitted).

Returns

9.MyPos

=

Instr(1,

SearchString,

"W") '

A

binary

comparison

starting

at

position

1.

Returns

("W"

is

not

found).

注意

InStrB

函数使用包含在字符串中的字节数据,所以

InStrB

返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

VBS教程:函数-CreateObject 函数

CreateObject

函数

创建并返回对

Automation

对象的引用。

CreateObject(servername.typename

[,

location])

参数

servername

必选项。提供对象的应用程序名称。

typename

必选项。要创建的对象类型或类。

location

可选项。对象所在的网络服务器将被创建。

说明

Automation

服务器至少提供一种对象类型。例如,字处理应用程序可以提供应用程序对象、文档对象和工具条对象。

要创建

Automation

对象,将

CreateObject

函数返回的对象赋值给某对象变量:

Dim

ExcelSheetSet

ExcelSheet

=

CreateObject("Excel.Sheet")

上述代码启动创建对象(在此实例中,是

Microsoft

Excel

电子表格)的应用程序。对象创建后,就可以在代码中使用定义的对象变量引用此对象。在下面的示例中,可使用对象变量、ExcelSheet

和其他

Excel

对象,包括

Application

对象和

Cells

集合访问新对象的属性和方法。例如:

'

Make

Excel

visible

through

the

Application

object.ExcelSheet.Application.Visible

=

True'

Place

some

text

in

the

first

cell

of

the

sheet.ExcelSheet.ActiveSheet.Cells(1,1).Value

=

"This

is

column

A,

row

1"'

Save

the

sheet.ExcelSheet.SaveAs

"C:\DOCS\TEST.XLS"'

Close

Excel

with

the

Quit

method

on

the

Application

object.ExcelSheet.Application.Quit'

Release

the

object

variable.Set

ExcelSheet

=

Nothing

在远程服务器上创建一个对象,当

Internet

安全关闭时只能完成。通过传递计算机名到

CreateObject

服务器名的参数,能在远程网络上创建对象。该名称如同共享部份的机器名。例如网络共享名命名为:

"\\myserver\public",

servername

"myserver"。另外,只能指定

servername

使用

DNS

格式或

IP

地址。

以下代码返回运行在命名为"myserver"的远程网络计算机上

Excel

实例的版本号

:

Function

GetVersion

Dim

XLApp

Set

XLApp

=

CreateObject("Excel.Application",

"MyServer")

GetVersion

=

XLApp.VersionEnd

Function

错误发生在指定的远程服务器不存在或无法找到。

VBS教程:函数-Atn 函数

Atn

函数

返回数值的反正切值。

Atn(number)

number

参数可以是任意有效的数值表达式。

说明

Atn

函数计算直角三角形两个边的比值

(number)

并返回对应角的弧度值。此比值是该角对边的长度与邻边长度之比。

结果的范围是从

-pi/2

pi/2

弧度。

弧度变换为角度的方法是将弧度乘以

pi/180。反之,角度变换为弧度的方法是将角度乘以180/pi

下面的示例利用

Atn

来计算

pi

的值:

Dim

pipi

=

4

*

Atn(1)

'

计算

pi

的值。

注意

Atn

Tan(将角作为参数返回直角三角形两边的比值)的反三角函数。不要混淆

Atn

与余切(正切的倒数

(1/tangent))函数。

本文转载自互联网,如有侵权,联系删除

相关推荐