TechTarget中国网站推荐

使用脚本程序管理Windows网络 第六部分:远程脚本

2008-10-6  选择字号:  | |
打印本文章
【TechTarget中国原创】本文主要学习如何在一个远程Windows XP计算上远程地运行你的脚本,原文发布于WindowsNetworking.com。

  在上一篇文章中,我们探讨了“Win32_NetworkAdapterConfiguration类的使用”和“跨过一道学习的坎”这两个个许多Windows管理员在学习脚本编写都会遇到的问题。

【TechTarget中国原创】本文主要学习如何在一个远程Windows XP计算上远程地运行你的脚本,原文发布于WindowsNetworking.com。

在上一篇文章中,我们探讨了“Win32_NetworkAdapterConfiguration类的使用”和“跨过一道学习的坎”这两个个许多Windows管理员在学习脚本编写都会遇到的问题。

现在让我们回顾一下我们的修改网络适配器IP地址的ChangeIPAddress.vbs脚本:

Option Explicit 
Dim objWMIService
Dim objNetAdapter
Dim strComputer 
Dim strAddress 
Dim arrIPAddress
Dim arrSubnetMask
Dim colNetAdapters
Dim errEnableStatic
If WScript.Arguments.count = 0 Then
    Wscript.Echo "Usage: ChangeIPAddress.vbs new_IP_address"
    WScript.Quit
End If
strComputer = "."
strAddress = Wscript.Arguments.Item(0) 
arrIPAddress = Array(strAddress) 
arrSubnetMask = Array("255.255.255.0")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.execQuery("select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each objNetAdapter in colNetAdapters
    errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask) 
Next

注意,我已经删除了注释以及最后显示结果的代码。

现在记住脚本的以下行为:

  • 它连接到本地计算机的root\cimv2命名空间;

  • 它使用一个select语句返回绑定和激活了TCP/IP的网络适配器集合;

  • 它将适配器的IP地址修改成命令行参数所指定的值。

假定我们将这个脚本保存在一个静态IP地址为172.16.11.43的Windows XP机器的目录:C:\localtest上。然后我们用管理员权限的用户打开命令提示符,再用这个脚本将机器的IP地址修改成172.16.11.54:

C:\locatest>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . : 172.16.11.43
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 172.16.11.1
C:\locatest>ChangeIPAddress.vbs 172.16.11.54
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
C:\locatest>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . : 172.16.11.54
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 172.16.11.1
C:\locatest>

提示1:记住修改Windows XP机器的IP地址要求本地的管理员权限。所以如果你当前以一个域用户登录到机器上,你需要打开一个命令提示符,然后输入:runas /user:administrator cmd.exe来打开第2个命令提示符,它就是运行在本地管理员权限上下文的,然后在第2个命令行提示符上运行这个脚本。

但如果我们想在一台机器上(如xp2.contoso.com)运行这个脚本去修改另一台机器(xp.contoso.com)的IP地址又应该怎么做呢?换句话说,我们想要运行脚本去完成远程Windows XP计算机的任务。我们要怎么实现?

第一次尝试

首先我们用我们Mary Jones的域管理员帐号登录到我们管理员工作站xp.contoso.com。因为域管理员拥有所有域内机器的本地管理员权限,所以当我们从我们管理员工作站运行我们的脚本作用于远程机器,它应该是能工作的,对吗?

假定我们的脚本ChangeIPAddress.vbs是我们管理员工作站的目录:C:\tools,我们打开一个命令提示符然后输入下面的命令:

C:\Documents and Settings\mjones>cd \tools
C:\tools>notepad ChangeIPAddress.vbs
Our script opens in Notepad, and we change this line:
strComputer = "."
to read the following:
strComputer = "xp2 "
We then select File | Save to save changes, and close Notepad. Now let’s run the script:
C:\tools>ChangeIPAddress.vbs 172.16.11.65 
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
C:\tools\ChangeIPAddress.vbs(20, 1) Microsoft VBScript runtime error: The remote server machine does not exist or is unavailable: ’GetObject’
C:\tools>

注意这需要运行一段时间后上面的错误消息才最终返回。但操作成功了吗?这样,如果我登录到远程机器xp2,contoso,com上,打开命令提示符然后输入ipconfig,我会得到:

C:\locatest>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . : 172.16.11.43
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 172.16.11.1
C:\locatest>

这样看来这个机器的地址仍然是17216.11.43,脚本并没有产生作用。怎么可能?是哪里出问题了呢?我们从错误信息上看到在脚本的第20行的地方出现了一个运行错误,让我们看看第20行是什么:

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

所以看起来我们的脚本不能连接到远程机器的WMI服务。那又是什么导致这个错误呢?

第二次尝试

也许这跟远程机器的Windows防火墙设置有关系。

记住,Windows XP SP2带有一个防火墙,它会阻挡除配置的例外程序之外的所有到达的网络流量。测试是否由于防火墙引起的最简单的办法是先暂时禁用目标机器的Windows防火墙。可以这样做,我们先以管理员身份登录xp2.contoso.com,从“控制面板”打开“Widnows防火墙”工具,在“常规”标签中选择“关闭”选项。

现在让我们在管理员工作站上再一次运行脚本:

C:\tools>ChangeIPAddress.vbs 172.16.11.65Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
C:\tools\ChangeIPAddress.vbs(23, 6) SWbemObjectEx: The remote procedure call failed.
C:\tools>

没错,又一个错误,同样它需要运行一段时间后才出现这个错误的。但至少这是一个不同的错误了,它显示在第23行出了问题:

errEnableStatic = objNetAdapter.EnableStatic(arrIPAddress, arrSubnetMask)

然而,当我在远程机器上的命令提示符输入ipconfig时,我得以这样的结果:

C:\locatest>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . : 172.16.11.65
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 172.16.11.1
C:\locatest>

所以看起来我们的脚本已经生效了!我们已经达到目的了!但这里仍有两个疑问:

  • 我们不想通过禁用远程机器的Windows防火墙来允许脚本对它操作。所以在这些机器上是否应该有一个防火墙例外设置使得在防火墙打开时允许远程脚本来操作它?

  • 上面的RPC错误是怎么回事?脚本已经生效了但为什么还有错误?

远程脚本异常

首先我们在远程机器上重新启用Windows防火墙。这样它将再次阻挡我们的脚本对它进行远程操作。然后在远程机器的管理员级的命令提示符上,输入gpedit.msc打开“本地计算机策略”,找到下面的策略设置(如图1):

图1:激活远程管理的Windows防火墙策略设置

图1:激活远程管理的Windows防火墙策略设置

双击这个策略设置并在本地子网(如图)中激活它。我们这样做是因为我们知道我们的管理工作站与目标计算机是在同一个子网的。

图2:激活远程管理例外

图2:激活远程管理例外

提示2:当然,你也许想要用不同的方法实现这个设置,如在一个域的Group Policy Object (GPO)而不是在本地配置这个策略的设置。依据这种方式,你就不需要通过远程机器来激活这个防火墙例外设置。

现在让我们在管理工作站再次运行脚本,试着把远程机器的IP地址从172.16.11.65修改成172.16.11.66:

C:\tools>ChangeIPAddress.vbs 172.16.11.66
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
C:\tools\ChangeIPAddress.vbs(23, 6) SWbemObjectEx: The remote procedure call failed.
C:\tools>

和之前一样的错误,但当我在远程机器上的命令提示符输入ipconfig 后我得到这样的结果:

C:\locatest>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
    Connection-specific DNS Suffix . :
    IP Address. . . . . . . . . . . . : 172.16.11.66
    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 172.16.11.1
C:\locatest>

成功了!所以保持激活远程机器上的Windows防火墙,但使用Group Policy在防火墙上对远程管理打开一个例开设置,我们就可以在一个管理工作站运行脚本来远程地修改机器的IP地址了。

这样我们就解决了第一个疑问了,但第二个呢?

我喜欢神秘些,所以让我们留到下一篇文章再解决。


使用脚本程序管理Windows网络
 使用脚本程序管理Windows网络 第一部分:基础
 使用脚本程序管理Windows网络 第二部分:脚本修订
 使用脚本程序管理Windows网络 第三部分:理解WMI
 使用脚本程序管理Windows网络 第四部分Win32-NetworkAdapterConfiguration
 使用脚本程序管理Windows网络 第五部分:跨过一道坎
 使用脚本程序管理Windows网络 第六部分:远程脚本
 使用脚本管理Windows网络 第七部分:修复神秘的错误
 第八部分:使用Network Monitor 3.0进行远程脚本故障修复
 使用脚本程序管理Windows网络 第九部分:理解远程脚本
 使用脚本程序管理Windows网络 第十部分:远程脚本技巧
 使用脚本管理Windows 网络 第十一部分:更多的远程脚本技巧
 使用脚本管理Windows网络 第十二部分:Windows管理检测的属性
 使用TCP RFC 1323进行Windows XP网络性能优化

还没有登录? 阅读全文请先登录或注册
用户名:(请填写您的E-mail做为登录账号)
  • 获取最新的IT业界资讯、市场动态、行业趋势等独家原创内容。
  • 分享国内外技术专业人士提供的技巧经验。
  • 利用专注IT的技术资源中心,不断更新专业知识。
  • 享受白皮书、Webcast等系列特色增值服务。
  • 免费参加TT中国举办的各种会员活动。
  • 更多的精彩服务,在不断开发中……
用户名:(请填写您的E-mail)
密 码:
 永久登录
请输入您的登录email:
相关的新闻
问:我应用Exchange 2000系统。以前当我拨号连接到服务器时,都可以找回我的email。但在我安装了ISA 服务器后就无法找回email了。请您帮忙解答。
作为一般的互联网使用者,网络突如其来的故障使我们感到很头痛,所以简单的了解一下基本的网络测试命令,对于我们来说也是一件好事。
被监控设备必须支持snmp协议,因为mrtg就是通过snmp协议来获取该设备的端口流量信息。如何在一个网络设备上启用snmp协议呢?
这一章将学习如何显示Windows管理检测(WMI)类的所有属性,它是关于如何使用脚本管理Windows网络的技巧之一。
你知道可以使用VBScritp编写的WMI脚本吗?它可以帮助你远程管理你的Windows网络。这篇文章详细介绍了两个关于如何使用脚本管理Windows网络的技巧。
在上一篇文章中,我们探讨了"Win32_NetworkAdapterConfiguration类的使用"和"跨过一道学习的坎",本文主要学习如何在一个远程Windows XP计算上远程地运行你的脚本。
802.11n无线网络标准即将于2009年正式推出。升级到802.11n必将带来诸多问题,本专题将向您提供相关的技术和疑难解答。
本专题将详细地、一步步地解释Cisco IOS IPSec VPN配置概念和实现基于软件及硬件的VPN网关。
“授人以鱼,不如授人以渔。”的确如此。而在忙碌的IT世界里,这也适用于脚本化管理:“给人一个有用的脚本,不如教他自己写脚本。”
最新更新
专家答疑
技巧
Sudhanshu Gupta
我想要配置Cisco 3750三层交换机的备用IOS启动,这样当交换机的IOS崩溃后它可以自动地通过加载启动保存在TFTP服务器上的IOS。
Michael Gregg
我需要知道竞争对手的IP地址或者是他使用电脑的大概的一个范围然后排除他的IP地址使他看不到我的网站。我怎样才能获得这样的信息?
Puneet Mehta
问:MAC地址限制能够控制连接到无线路由器的有线网络吗?还是只能控制无线客户端?TechTarget专家为您解答。