当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs针对一个 IP 地址范围运行脚本

VBScript
VBS中SendKeys的基本应用
VBScript教程 第十四课在VBScript中使用对象
VBScript教程 第十三课 VBScript与窗体
VBScript教程 第十二课VBScript页面的简单样例
VBScript教程 第十一课深入VBScript
VBScript教程 第十课 VBScript编码约定
VBScript教程 第九课VBScript过程
VBScript教程 第八课 使用循环语句
VBScript教程 第七课使用条件语句
VBScript教程 第六课VBScript运算符
VBscript教程 第五课 VBScript常数
VBScript教程 第四课VBScript变量
VBScript教程 第三课VBScript数据类型
VBScript教程 第二课在HTML页面中添加VBscript代码
VBScript教程 第一课什么是VBScript
VBScript的入门学习资料
VBScript语法速查及实例说明
MsgBox函数语言参考
VBS教程:正则表达式简介 -后向引用
VBS教程:正则表达式简介 -选择与编组

VBScript 中的 用vbs针对一个 IP 地址范围运行脚本


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 84 ::
收藏到网摘: n/a

问:
嗨,Scripting Guy!我想在一个子网中的所有计算机上运行脚本。有没有办法不必将所有 IP 地址都硬编码到脚本中就能完成这项任务呢?
-- RB
答:
嗨,RB。根据您在电子邮件中的描述,看来您的设置类似于:您的子网的 IP 地址范围为 192.168.1.1 到 192.168.1.254。您想创建一个脚本,可以先从第一个 IP 地址开始,在相应的计算机上运行某个代码,然后转到第二个地址,运行相同的代码,按地址顺序在每台计算机上都运行相同的脚本。此外,您想通过尽可能最少的代码行就能办到这一点,并且不必硬编码好几百个 IP 地址。
那么,有办法能做到吗?当然有,而且比您想象的还要简单。
首先,让我们向您介绍如何某个 IP 地址范围进行循环。这是一个示例代码,所以只用于回显每个 IP 地址的名称。在介绍了该脚本的工作原理后,我们将举一个更实际的例子:
复制代码 代码如下:

On Error Resume Next
intStartingAddress = 1
intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
strComputer = strSubnet & i
Wscript.Echo strComputer
Next

不,真的,这就是整个脚本了。我们先指派了一些变量:将值“1”指派给 intStartingAddress;将值“254”指派给 intEndingAddress;并将值“192.168.1.”指派给 strSubnet。(注意“1”后面的英文句号)。正如您可能猜到的,这些值将作为建立 IP 地址的构建块。
指派了这些变量之后,我们创建了一个 For-Next 循环,用以运行 1 (intStartingAddress) 到 254 (intEndingAddress) 的变量。为何要循环 1 到 254 呢?原因很简单:那是您的 IP 范围。如果 IP 范围是 192.168.1.7 到 109.168.1.54,又该怎么办呢?没有问题:使用相同的循环,但要将intStartingAddress 的值改为“7”,并将 intEndingAddress 的值改为“54”。
在此循环中,我们将字符串值 192.168.1. 与循环变量 (i) 的当前值相串联。在首次运行循环——当“i”等于“1”时,我们将 192.168.1. 和 1 相结合。您猜怎么样?我们得到了值 192.168.1.1,恰好是第一个 IP 地址。最后一次运行循环时,我们将把 192.168.1. 和 254 相结合,从而得到最后一个 IP 地址的值——192.168.1.254。运行该脚本,将得到:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
非常简单吧?
当然,您可能对于回显一组 IP 地址不会多感兴趣;您想运行某种 WMI 代码。好的:
On Error Resume Next
intStartingAddress = 1
intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
strComputer = strSubnet & i
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_OperatingSystem")
For Each objItem in ColItems
Wscript.Echo strComputer & ": " & objItem.Caption
Next
Next
正如您所看到的,我们再次把 strComputer 变量的值设为某个 IP 地址。然后连接到该地址所表示的计算机上的 WMI 服务。这很容易办到,因为 WMI 既可以使用计算机名,也可以使用 IP 地址连接到计算机。
现在,我们要加入一项小技巧。您在电子邮件中提到,想要排除几个 IP 地址(可能代表路由器或其他东西)。好的。这里有一个经过修改的脚本,其使用 Select Case 语句来排除某些计算机:
intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
Select Case i
Case 10
Case 50
Case 100
Case Else
strComputer = strSubnet & i
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_OperatingSystem")
For Each objItem in ColItems
Wscript.Echo strComputer & ": " & objItem.Caption
Next
End Select
Next
注意一下当“i”值等于 10、50 或 100 时,所发生的变化。没错:一点都没变化。如果计算机的 IP 地址为 192.168.1.10、192.168.1.50 或 192.168.1.100,不会发生任何变化;不会运行任何 WMI 代码,脚本将照样执行循环。该 WMI 代码将仅在拥有其他 IP 地址(上面三个地址除外)的计算机上执行。这是一种用以在该脚本的 WMI 部分中排除特定 IP 地址的既简单又有效的办法。