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

2008-10-10    | |
打印本文章
RSS

导读:这篇文章详细介绍了两个关于如何使用脚本管理Windows网络的技巧。

关键词:Windows网络 脚本

正在加载数据...

【TechTarget中国原创】你知道可以使用VBScritp编写的WMI脚本吗?它可以帮助你远程管理你的Windows网络。这篇文章详细介绍了两个关于如何使用脚本管理Windows网络的技巧,原文发表在WindowsNetworking.com。

在前面的几篇文章中我们已经学习了关于Windows平台上远程脚本的概念和其他相关知识。在这篇文章中,我们将讨论与使用VBScript编写WMI脚本的远程脚本化相关的两个技巧。

首先,介绍一个来自《Windows Vista工具集》的技巧。这本书是专门针对在大中型企业网络环境中部署Windows Vista的IT人员使用的。我有幸作为主要作者参与这本书的撰写,并且得到Microsoft出版社授权,可以与大家一起分享这本非常棒的书中的一些节选。

【TechTarget中国原创】你知道可以使用VBScritp编写的WMI脚本吗?它可以帮助你远程管理你的Windows网络。这篇文章详细介绍了两个关于如何使用脚本管理Windows网络的技巧,原文发表在WindowsNetworking.com。

在前面的几篇文章中我们已经学习了关于Windows平台上远程脚本的概念和其他相关知识。在这篇文章中,我们将讨论与使用VBScript编写WMI脚本的远程脚本化相关的两个技巧。

首先,介绍一个来自《Windows Vista工具集》的技巧。这本书是专门针对在大中型企业网络环境中部署Windows Vista的IT人员使用的。我有幸作为主要作者参与这本书的撰写,并且得到Microsoft出版社授权,可以与大家一起分享这本非常棒的书中的一些节选。

技巧一:将Cscript.exe作为默认脚本部署在远程计算机上

第一个技巧,简单却很实用,但我们必须先介绍一些必需的背景知识。我相信大家知道目前有几种方法可以在Windows计算机调用脚本的。例如,如果在一台计算机上有一个脚本ChangeIPAddress.vbs,我们可以这样执行它:

 双击该.vbs文件或它的快捷方式。

 点击“开始”-“运行”,输入“ChangeIPAddress.vbs”后点击“OK”。

 打开命令提示符,转到脚本目录,输入ChangeIPAddress.vbs,回车。

完成这些步骤后出现的结果取决于计算机上的Windows Script Host (WSH)的默认设置。WSH是一个基于脚本引擎的与语言无关的脚本宿主。例如,WSH会使用VBScript脚本引擎运行VBScript脚本,所以WSH是作为脚本运行的“环境”存在的。但WSH实际上有两个默认的脚本宿主:

 Wscript.exe ,它提供了一个基于Windows的对话框用于设置脚本属性,并以窗口形式显示脚本输出。

 Cscript.exe ,它是在命令提示符上配置脚本属性和显示脚本输出。

让我们先看看两者之间的区别。我将使用第二章中的ChangeIPAddress.vbs脚本来演示这个问题。让我们在一个Windows Vista主机上打开命令提示符并使用这个脚本将主机的IP地址修改为172.16.11.173。这里需要注意的第一件事是修改网络配置需要本地主机的管理员权限,所以我需要右击 “附件”中的“命令提示符”快捷方式,选择“以管理员身份运行”。这时会弹出一个“用户帐号控制(UAC)”对话框,我会点击“继续”(如果我当前用户帐号是主机的本地管理员组的成员)或输入一个本地管理员帐号的认证信息(如果我的用户帐号仅仅是本地用户组的成员)。

无论是哪种方法,我都会打开一个管理员运行级别的命令提示符窗口,然后我输入下面的命令去修改主机的地址(图1):

 尝试使用脚本去修改IP地址

图1:尝试使用脚本去修改IP地址

当我按“回车”后,经了几秒钟后会有一个对话框弹出(图2):

 脚本的输出显示在一个对话框中

图2:脚本的输出显示在一个对话框中

这个消息是从什么地方来的?这是因为在我们的ChangeIPAddress.vbs脚本的最后包含有以下几行代码:

'Display result or error code
If errEnableStatic=0 Then
     Wscript.Echo "Adapter's IP address has been successfully changed to " & strAddress
Else
     Wscript.Echo "Changing the adapter's address was not successful. Error code " & errEnableStatic
End If

所以结果是Wscript.Echo语句显示一个窗口化的输出(如,弹出一个对话框),而不是在命令提示符窗口中显示输出。这其中的原因是,Wscript.exe是主机默认的脚本宿主,而这就是它的默认处理方法,如:使用像这样的弹出窗口显示所有的脚本输出。

我们怎么能够改变它的这种默认行为而将脚本输出显示在命令提示符中呢?一种方法是显示式地调用命令行脚本宿主Cscript.exe来运行脚本。你可以这样做(图3):

 使用cscript.exe使脚本输出显示在命令提示符窗口中

图3:使用cscript.exe使脚本输出显示在命令提示符窗口中

但像这样每一次都必须在脚本名称前加入Cscript是很麻烦的,所以我们可以将先Cscript.exe设为所有WSH调用的默认脚本宿主,作法是这样:

 将cscript.exe设为默认的脚本宿主

图4:将cscript.exe设为默认的脚本宿主

现在我们可以直接运行脚本并在命令提示符窗口中显示它的结果,而不需要在前面加Cscript了(图5):

 脚本的输出直接显示在命令提示符窗口

图5:在Cscript.exe调为默认的脚本宿主后,脚本的输出直接显示在命令提示符窗口

现在你可能已经完全明白了,但是这里还有一个问题。我们有一批像ChangeIPAddress.vbs这样的脚本是要通过部署在目标主机上远程地运行的,它们是作为使用“分组策略”的登录脚本或启动脚本的。而这其中有一些脚本使用了Wscript.Echo语句去生成脚本输出。如果其中一个这样的脚本部署到远程主机上并在主机上运行,将会怎么样呢?脚本运行后,会有一系列的窗口出现在用户桌面,然后用户将不得不一个个地去点击OK关闭它们,然后才能让脚本继续执行下去。这太麻烦了!有什么办法可以解决这个问题呢?

是的,你可以有两个方法可以选择。第一,你可以编辑脚本,删除或注释掉所有的Wscript.Echo语句,这样脚本就不会产生任何输出。这也是很麻烦的,特别是如果你有大量这样的脚本。

那么第二种方法是什么呢?以下是摘自《Windows Vista工具集》的方法:

在一个使用“分组策略”管理桌面计算机的Active Directory环境中,你可以通过以下的步骤将OU中的所有计算机上的默认脚本宿主从Wscript.exe修改成Cscript.exe:

1.用记事本新建一个文本“ChangeToCscript.bat”,并在其中添加两行代码:

@echo off
cscript //h:cscript //s

2.打开链接到OU的GPO,转到Computer Configuration\Windows Settings\Scripts\Startup。

3.双击“Startup”策略设置,打开它的属性窗口。

4.点击“Show Files”按钮,将ChangeToCscript.bat从Windows资源浏览器拷贝/粘贴到子目录SYSVOL 中,这是启动脚本所在的目录。

5.在“Startup”策略设置的属性窗口中点击“Add”按钮。

6.点击“Browse”按钮并选择ChangeToCscript.bat。

7.关闭所有的属性窗口。

8.添加这个启动脚本到目标主机,会使得在这些计算机重新启动后,它们的默认脚本宿主从Wscript.exe变为Cscript.exe,而且不管对于标准用户还是本地计算机管理员的目标用户是都会生效。

注意:ChangeToCscript.bat必须作为“Startup”脚本运行,而不是“Logon”脚本。如果你把它作为Logon运行,这只会在目标用户是本地计算机管理员时才会有效。你现在已经感觉到使用两行的批处理文件就能解决问题很不错吧?现在你可以部署任何脚本到你的目标计算机,而不用担心用户会在他们的屏幕上碰到大量的窗口了。

技巧二:不需要指定管理员身份直接运行脚本

第二个技巧是一个读者读完我之前的一篇文章后提交给我的。我认为这是一个非常棒的方法,所以我问他是否可以共享给WindowsNetworking.com的其他读者,他同意了。所以我将直接引用他邮件,向大家介绍他提供的技巧:

我不输入身份认证信息而直接执行“运行”的方法是使用本地管理员帐号访问WMI,然后将本地管理员密码存储在一个在网络中共享的文本文件中,它是在受NTFS权限保护的。例如,如果“tech1 ”和“tech4 ”和“ tech5 ”是正常的域帐户(而不是域管理员) ,但这些用户已经被授权运行WMI脚本,那么我将给这些账户NTFS权限来获得包含本地管理员密码的文本文件,这样我就可以这样导入密码并连接:

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2", strComputer & "\Administrator", strImportedPassword)
Well, the above is not 100% true. I actually use:
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString("SeSecurityPrivilege")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, "root\cimv2", strComputer & "\administrator", strPWD, "", "", &H80)
Set objReg = objSWbemLocator.ConnectServer(strComputer, "root\default", strComputer & "\administrator", strPWD, "", "", &H80)
Set oReg = objReg.Get("StdRegProv")

……这样达成了同样的目标。

连接到本地管理员帐户的方法有另一个有趣的副作用;它不会在PC的“Documents and Settings”目录你的域帐号的帐号信息复本。当使用我的网域帐户时,有几个用户问道:“为什么你连接到我的电脑上?”并且很是怀疑我在窥探什么。通过使用本地管理员帐户,他们不知道有其他人连接(他们是无法看到安全日志)。

关于记录问题,实际中我们有几个不同的本地管理员密码可使用;因此脚本导入用户列表,并试图逐一尝试直到成功或试完所有选择。

查看全文
 
IP数据网不同于分组交换、DDN、帧中继、ATM等基础网络,它是一个开放的系统,因此,IP数据网的管理有其特殊的复杂性。
 
在全国人民步入互联网时代的今天,512K、1M、2M、8M的实际速度有多少,这些带宽我们能做些什么?网民到底需要多大的带宽?
 
问:我们公司有50位用户以及一个小型的数据存储和因特网服务器机房。我们从大集团总部的无线连接访问因特网和进行电子邮件交流,但是我们只有一个很小的域控制器。
 
网络访问不畅是一种常见的故障现象,面对这种现象,很多人往往会从物理线路、设备状态、上网参数等方面寻找故障原因,其实,网络掩码地址也是一个不容忽视的原因。
 
在架构网络的过程中经常碰到这样的情况,网络节点已经用光,可现在又增加了一台笔记本需要上网。该怎样解决共享问题呢?
VPN(Virtual Private Network),即“虚拟专用网络”,是对企业内部网的扩展。虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,并保证数据的安全传输。
网络是复杂的,网络出现故障的原因是多种多样的,那么我们该如何诊断网络故障,修复网络故障的方法有哪些呢,以及如何来进行网络故障的修复呢?在修复网络故障的过程中,我们常常会遇到许多问题,那么有没有什么可以遵循的原则呢?
网络管理员也负责网络备份、测试备份和灾难恢复过程。这对于电源或硬件故障、数据和/或网络问题以及物理灾难问题的恢复是至关重要的。
最新更新
专家答疑
技巧
David Minutella
编号640-503 的CCNP路由测试与编号640-504的CCNP的交换测试有什么不同之处?如果我一直在做网络管理员,并且已经取得了CCNA认证,那么我考取哪个认证更好呢?
Ed Tittel
随着经济的衰退, 有抱负的IT网络人员以及经验老道的职场人士开始重新审视就业市场。本文将探讨如何在网络领域中生存,甚至走上蓬勃发展之路。
Lindi Horton
问:我们公司有50位用户以及一个小型的数据存储和因特网服务器机房。我们从大集团总部的无线连接访问因特网和进行电子邮件交流,但是我们只有一个很小的域控制器。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录