普遍使用的Windows 脚本语言和平台就包括Windows shell 脚本Visual Basic 脚本(VBS)和Jscript这些我在以前的一篇文章中讨论过下面我们将对Windows shell 脚本与网络管理相关的部分进行深入的了解该讨论的目的是使大家对使用Windows命令行有一个基本的了解包括参数和转换例如下面的命令del myfiletxt /f 在这里del是命令myfiletxt是参数(其为del命令提供了需要的信息)还有/f转换它修改了该命令使其强迫只读文件的删除 登录脚本最普遍用到的shell 脚本可能就是登录脚本了一个登录脚本被用作在登录的时间为一个用户配置Windows环境而且通常专门用于一组用户举个例子来说金融组的成员可能自动映像网络驱动器到金融网络共享文件夹而行销组可能自动映像网络驱动器到行销网络共享文件夹 为了实现这个需要为每一个用户或成员组创建一个脚本然后复制到合适的服务器位置(该位置基于Windows版本不同而不同)在Windows NT脚本文件通常放在C:\Winnt\System \Repl\Export\Scripts(或者是Import这依赖于你配置时复制的位置)然后你在用户说明属性对话框中指向那个文件当使用活动目录时你经由一个群组策略(Group Policy)配置注册脚本首先将脚本文件复制到Sysvol子目录图A显示了在哪里访问这个子文件夹 图A在Sysvol目录下找到 Scripts文件夹 注意你也可以选择用于下网启动和关闭的脚本然后你可以为包括那个脚本的给定容器直接编辑组策略对象如图B所示图 B在活动目录中一个特定容器中编辑脚本登录脚本中的命令在一个脚本中最常用的命令是NET USE它正好是许多可用的NET命令的一个子集 NET USE命令允许你建立驱动器映射当在一个登录脚本中使用该命令时它可以将该驱动映射到一个特定用户或组用户例如假设行销部门需要一个驱动器映射到Server上的行销文件夹另一个驱动映射到Server上的管理员文件夹而且再需要一个驱动映射到Server上的共享home folder中的个人用户的home文件夹以下是一个例子 NET USE F: \\server\marketing PERSIST:NONET USE G: \\server\admin PERSIST:NONET USE H: \\server\home folder\%username% PERSIST:NO 每行末的关键字PERSIST表示在下一次启动的时候是否重新连接驱动器映射通常你不想让这种情况发生原因是另一个用户可能需要不同的驱动映射你也应该注意第三行首先需要引用标记第二使用环境变量%username%当一个用户登录时用户名被临时存储并可以被Windows shell使用(为了验证这一点你可以运行echo %username命令这将输出你的登录名)如果每一个用户拥有与那个人的登录名相同的文件夹你可以使用那个自动映射到根文件夹%username%变量是由Windows自动创建并且将经常用到的几个环境变量之一你可以通过在命令行使用set类型设置而看到一个完整的列表你也可以用这个命令创建你自己的变量要想搞清楚怎么做可以设置set /?来进行查看Windows命令要想看到一个完整的命令列表以及关于如何使用它们的信息可以参考Windows Help如果你使用Windows 系统点击开始|帮助在搜索标签里输入command reference选择你要显示的主题双击命令参考主页在Windows NT中点击开始|帮助在搜索标签里输入command然后在Pick A Topic下选择命令索引并点击显示按钮另外一个有用的登录脚本命令是NET TIME它将使得一个网络上的时间同步于服务器上的时间在该命令里你可以使用一些转换而且你也可以在Windows Help中检查该命令如下是最简单的使用NET TIMENET TIME \\timesvr /SET /YES这个告诉该计算机与名称为timesvr的服务器的时间同步/YES转换指示它强制同步即使被命名的服务器不是一个时间源服务器在以后的文章里我将讨论一些在脚本中有用的编程结构包括条件处理这里看到的是条件处理的大体框架如果Novell NetWare操作系统中的管理员是使用状态IF MEMBER OF的一定组的成员那么该管理员将乐忠于告诉登录脚本做什么尽管在Windows脚本中没有这样的状态可用但是有两种可能的工作区这要依赖于你在管理一个Windows NT区域还是用活动目录管理一个Windows 域Windows NT Resource Kit包含一个名叫IFMEMBEREXE的工具这个可以作为NetWare IF MEMBER OF被用于相同的目的不过它的使用相当的复杂仍需要另一个称作为ERRORLEVEL的架构以下介绍其工作原理让我们假设登录的用户既是行销组的成员又是管理员组的成员你想要设置一块只有行销管理员才可以访问的共享区域首先你要包含如下命令行IFMEMBER marketing managersIFMEMBER工具(假设其处于一个搜索路径中)将检查所有组中的成员然后退出并将用户的特定变量ERRORLEVEL的值设定为包含该用户的组数目在这个例子中那个数目应该是因此整个过程如下所示IFMEMBER marketing managersIF NOT ERRORLEVEL EXITNET USE J: \\SERVER\MKTGMGR /PERSIST: NO如果该用户是两个组的成员ERRORLEVEL中存的值将是如果值不是脚本将执行完毕但是如果值是它将执行下面的状态IFMEMBEREXE也可以用于Windows 环境中但是如果你使用活动目录你会另作选择不是在登录脚本中的参考组你可能按照以上组相同行设计你的组织单元这样你可以对应于每一个OU创建组策略对象同时该OU拥有一个专门登录脚本不必使用IFMEMBER工具 Shell脚本用于其他用途就像我以上提到的设计登录脚本用于每一次用户登录该网络时被调用然而例如假设你的组织刚刚利用地理信息系统(GIS)完成了工作任何GIS包括大量的形状类型的文件和图像通常位于一个复杂的目录数据结构中如果被安装于本地它们将最好地运作因此你决定复制这些文件将完整的目录从一个网络共享保存到每一个工作站的本地硬件驱动器上 当然你也可以打开DOS命令行手工进行测试显然这将大大简化写一个包含每一个需要考虑的命令的脚本 使用COPY命令或是更通用的XCOPY命令你可以创建一个脚本完成该工作复制它到一个可移动的介质上如软盘并且通过敲击一个简单的命令在每一个位置运行该脚本好处有两点 这将节省你的时间因为你不必在每个工作站敲击每个命令 这将有助于避免由于误敲击一个命令或路径名而导致的错误 最好的实践方法当你写Windows shell 脚本时你应该记住以下几点 在你将你的脚本用于产品化阶段之前一定要进行测试 一直要文档化你的脚本即使它们非常简单当一个脚本遇到关键字REM它将忽略那一行因此你可以使用该关键字为你的脚本增加注释至少你应该包括该脚本的目的日期和作者名字记住对你来说很明显的东西对别人来说可能不是这样而且过了一年以后你也会不清楚了 记住当你的脚本运行时其中的每一个命令行将显示在屏幕上除非是你使用命令@ECHO OFF改变该特性继续要想熟练掌握Windows shell 脚本你需要了解可用的命令行及其语法你可以参考Windows Help来对命令进行学习对每一个命令有一个总体认识并找出可以帮助你完成任务所需的那些命令每一个命令有一个相关主题连接通常包括两个连接一个提供使用该命令的例子一个是关于该命令更多的注释此外你应该尽可能多得不断尝试使用不同命令和选项直至对此精通熟练不要担心犯错这是了解各个变量最好的方法
|