如何针对一个 IP 地址范围运行脚本?
来源:百度文库 编辑:神马文学网 时间:2024/04/30 01:12:03
问:
嗨,Scripting Guy!我想在一个子网中的所有计算机上运行脚本。有没有办法不必将所有 IP 地址都硬编码到脚本中就能完成这项任务呢?
-- RB
答:
嗨,RB。根据您在电子邮件中的描述,看来您的设置类似于:您的子网的 IP 地址范围为 192.168.1.1 到 192.168.1.254。您想创建一个脚本,可以先从第一个 IP 地址开始,在相应的计算机上运行某个代码,然后转到第二个地址,运行相同的代码,按地址顺序在每台计算机上都运行相同的脚本。此外,您想通过尽可能最少的代码行就能办到这一点,并且不必硬编码好几百个 IP 地址。
那么,有办法能做到吗?当然有,而且比您想象的还要简单。
首先,让我们向您介绍如何某个 IP 地址范围进行循环。这是一个示例代码,所以只用于回显每个 IP 地址的名称。在介绍了该脚本的工作原理后,我们将举一个更实际的例子:
On Error Resume NextintStartingAddress = 1intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressstrComputer = strSubnet & iWscript.Echo strComputerNext
不,真的,这就是整个脚本了。我们先指派了一些变量:将值“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.1192.168.1.2192.168.1.3192.168.1.4
非常简单吧?
当然,您可能对于回显一组 IP 地址不会多感兴趣;您想运行某种 WMI 代码。好的:
On Error Resume NextintStartingAddress = 1intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressstrComputer = strSubnet & iSet objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _("Select * From Win32_OperatingSystem")For Each objItem in ColItemsWscript.Echo strComputer & ": " & objItem.CaptionNextNext
正如您所看到的,我们再次把 strComputer 变量的值设为某个 IP 地址。然后连接到该地址所表示的计算机上的 WMI 服务。这很容易办到,因为 WMI 既可以使用计算机名,也可以使用 IP 地址连接到计算机。
现在,我们要加入一项小技巧。您在电子邮件中提到,想要排除几个 IP 地址(可能代表路由器或其他东西)。好的。这里有一个经过修改的脚本,其使用 Select Case 语句来排除某些计算机:
intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressSelect Case iCase 10Case 50Case 100Case ElsestrComputer = strSubnet & iSet objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _("Select * From Win32_OperatingSystem")For Each objItem in ColItemsWscript.Echo strComputer & ": " & objItem.CaptionNextEnd SelectNext
注意一下当“i”值等于 10、50 或 100 时,所发生的变化。没错:一点都没变化。如果计算机的 IP 地址为 192.168.1.10、192.168.1.50 或 192.168.1.100,不会发生任何变化;不会运行任何 WMI 代码,脚本将照样执行循环。该 WMI 代码将仅在拥有其他 IP 地址(上面三个地址除外)的计算机上执行。这是一种用以在该脚本的 WMI 部分中排除特定 IP 地址的既简单又有效的办法。
嗨,Scripting Guy!我想在一个子网中的所有计算机上运行脚本。有没有办法不必将所有 IP 地址都硬编码到脚本中就能完成这项任务呢?
-- RB
答:
嗨,RB。根据您在电子邮件中的描述,看来您的设置类似于:您的子网的 IP 地址范围为 192.168.1.1 到 192.168.1.254。您想创建一个脚本,可以先从第一个 IP 地址开始,在相应的计算机上运行某个代码,然后转到第二个地址,运行相同的代码,按地址顺序在每台计算机上都运行相同的脚本。此外,您想通过尽可能最少的代码行就能办到这一点,并且不必硬编码好几百个 IP 地址。
那么,有办法能做到吗?当然有,而且比您想象的还要简单。
首先,让我们向您介绍如何某个 IP 地址范围进行循环。这是一个示例代码,所以只用于回显每个 IP 地址的名称。在介绍了该脚本的工作原理后,我们将举一个更实际的例子:
On Error Resume NextintStartingAddress = 1intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressstrComputer = strSubnet & iWscript.Echo strComputerNext
不,真的,这就是整个脚本了。我们先指派了一些变量:将值“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.1192.168.1.2192.168.1.3192.168.1.4
非常简单吧?
当然,您可能对于回显一组 IP 地址不会多感兴趣;您想运行某种 WMI 代码。好的:
On Error Resume NextintStartingAddress = 1intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressstrComputer = strSubnet & iSet objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _("Select * From Win32_OperatingSystem")For Each objItem in ColItemsWscript.Echo strComputer & ": " & objItem.CaptionNextNext
正如您所看到的,我们再次把 strComputer 变量的值设为某个 IP 地址。然后连接到该地址所表示的计算机上的 WMI 服务。这很容易办到,因为 WMI 既可以使用计算机名,也可以使用 IP 地址连接到计算机。
现在,我们要加入一项小技巧。您在电子邮件中提到,想要排除几个 IP 地址(可能代表路由器或其他东西)。好的。这里有一个经过修改的脚本,其使用 Select Case 语句来排除某些计算机:
intEndingAddress = 254strSubnet = "192.168.1."For i = intStartingAddress to intEndingAddressSelect Case iCase 10Case 50Case 100Case ElsestrComputer = strSubnet & iSet objWMIService = GetObject _("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _("Select * From Win32_OperatingSystem")For Each objItem in ColItemsWscript.Echo strComputer & ": " & objItem.CaptionNextEnd SelectNext
注意一下当“i”值等于 10、50 或 100 时,所发生的变化。没错:一点都没变化。如果计算机的 IP 地址为 192.168.1.10、192.168.1.50 或 192.168.1.100,不会发生任何变化;不会运行任何 WMI 代码,脚本将照样执行循环。该 WMI 代码将仅在拥有其他 IP 地址(上面三个地址除外)的计算机上执行。这是一种用以在该脚本的 WMI 部分中排除特定 IP 地址的既简单又有效的办法。
如何针对一个 IP 地址范围运行脚本?
如何隐藏IP地址
如何查询IP地址?
如何屏蔽ip地址?
如何隐藏ip地址
如何禁止修改ip地址
y如何隐藏ip地址
国内若干个学校的ip地址范围
如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行?
如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行?
如何查看本机ip地址 外网ip地址 本机真实ip 公网ip命令
如何知道对方IP地址?如何隐藏自己的IP
如何隐藏自己的IP地址
如何隐藏自己的IP地址!
如何隐藏自己的IP地址22
如何屏蔽本机的IP地址?
如何查看自己的IP地址
如何隐藏自己的IP地址
如何隐藏自己的IP地址 好
如何隐藏自己的IP地址!
如何隐藏自己的IP地址
如何屏蔽本机的ip地址?
如何隐藏自己的IP地址
如何隐藏自己的IP地址