Chinaunix首页 | 论坛 | 博客
  • 博客访问: 574900
  • 博文数量: 772
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4940
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-16 19:52
文章分类

全部博文(772)

文章存档

2011年(1)

2008年(771)

我的朋友

分类:

2008-10-16 19:56:22


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

--------------------next---------------------

阅读(380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~