基于VB和批处理的机房计算机管理软件的设计与实现
2010-11-27刘金明鹿晓力
刘金明,鹿晓力
(1.吉林电子信息职业技术学院 计算机系,吉林 吉林132021;2.郑州轻工业学院 电气信息工程学院,河南 郑州 450002)
机房计算机管理是一项复杂繁重的工作.在日常的管理与维护过程中,管理员经常要对数十台甚至百余台计算机进行批量开机、关机和重新启动操作,同时还要做好计算机网络的维护,保证局域网的连通顺畅.若能设计出一款界面友好、简捷易用的机房计算机管理软件来帮助管理员完成繁复的工作,就可以将其从大量的重复劳动中解放出来,也提高了机房的管理效率和管理水平.
将适合编写图形化界面程序的Visual Basic(简称VB)与批处理的强大功能相结合,做到优势互补,便可设计出基于VB与批处理的机房计算机管理软件,实现上述愿望.
1 VB和批处理联合进行软件开发的思想
VB是由微软公司开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,适合开发 Windows 环境下的各类应用程序.事件驱动适用于具有图形用户界面(GUI)的软件编程方式,采用VB语言,利用事件驱动的编程机制,可以高效地开发出功能强大、图形界面丰富的应用软件[1-3].
批处理(也称为批处理脚本或批处理程序)文件的扩展名为 .bat或 .cmd,它由Windows系统内嵌的命令解释器cmd.exe解释运行.批处理脚本支持顺序、分支、循环3种基本控制结构,其中的每条语句都是命令解释器能够单独执行的具有一定功能的命令.一个功能强大的批处理就是在依据实际需要选用命令语句的基础上,巧妙利用各种控制结构对其加以有机组合而设计出的脚本[4].
由于VB与批处理二者相差较远,通常不会将其联合起来进行软件开发,但考虑到VB适用于开发具有图形界面的程序,而批处理在网络及远程控制方面具有诸如ping、shutdown等方便实用的命令可供利用,只要能解决两种不同程序间的数据传递问题,便可将二者联合进行软件开发,使其优势互补.
2 软件的总体设计
2.1 功能模块划分
根据对机房计算机管理员日常工作内容的调查了解及综合归纳,计算机管理软件的主要任务是对计算机实施远程控制,它应包括批量开机(包含MAC地址扫描和远程唤醒两个子模块)、批量关机、批量重启、取消关机/重启、局域网连通性检测、短消息发送和参数配置等7个功能模块.
2.2 功能模块的实现方法
由于命令解释器固有命令对上述要实现的功能的支持,批量关机、批量重启、取消关机/重启、局域网连通性检测和短消息发送等5个模块以及MAC地址扫描子模块基于批处理进行设计较为简便,各模块独立形成批处理脚本,由人机界面通过Shell函数调用执行.
远程唤醒子模块因涉及网络协议及数据包的形成与发送,参数配置模块本身是人机界面的一部分,则二者采用VB设计实现比较合适.
图1给出了该软件的功能结构示意图,机房管理员通过人机界面调用执行诸功能模块,文本文件组则在VB程序与批处理程序间起着数据传递中介的作用.
图1 机房计算机管理软件功能结构示意Fig.1 The schematic diagram of function structure of the software for computer room management
3 软件的详细设计及实现
3.1 批量关机、批量重启和取消关机/重启模块
批量关机模块逐一检测各计算机是否处于开机状态,若开机,则将其关闭;批量重启模块逐一检测各计算机是否处于开机状态,若开机,则将其重启;取消关机/重启模块则能取消此前的关机或重启操作.3个模块均使用了命令解释器提供的shutdown命令,该命令带-s和-m参数可实现远程关机,带-r和-m参数可实现远程重启,带-a和-m参数可取消此前的关机或重启操作,还可通过-t参数设置关机延时的时长.以批量关机模块为例,主要代码如下:
for /l %%i in (!d!,1,!e!) do (
ping -n 1 !a!.!b!.!c!.%%i>nul
if !errorlevel!== 0 shutdown -t !time! -s
-m !a!.!b!.!c!.%%i
)
3.2 局域网连通性检测模块[5]
命令解释器中ping命令的工作原理是向对方计算机发送ICMP数据包,依据收到包的数量来判断网络的连通性.本模块可逐一检测局域网中计算机的连通性,并将检测信息和因故障未入网计算机的IP分别保存在文本文件testinf.txt 和failurereport.txt中,以备查看.主要代码如下:
for /l %%i in (!d!,1,!e!) do (
ping !a!.!b!.!c!.%%i>>testinf.txt
if !errorlevel!==1 echo !a!.!b!.!
c!.%%i>>failurereport.txt
)
3.3 局域网消息发送模块
局域网消息发送功能需要Windows系统信使服务(Messenger Service)的支持,当该服务开启时,在发送端使用net send命令发送消息,接收端便弹出用于显示消息的名为“信使服务”的对话框.本模块先从文本文件message.txt中提取待发送的消息内容(消息内容是由人机界面接受并保存于message.txt文件中的),再向局域网中全部计算机发送该消息.主要代码如下:
set /P mess= net send * "!mess!" 命令解释器中的nbtstat命令,可通过对方计算机的IP地址查看NetBIOS的相关信息,其中含有对方网卡的MAC地址,findstr命令则可在此基础上将MAC地址单独提取出来.本模块通过联合使用nbtstat和findstr命令,获取所有处于开机状态计算机的MAC地址,保存于文本文件中,供远程唤醒子模块使用.主要代码如下: for /l %%i in (!d!,1,!e!) do ( ping -n 1 !a!.!b!.!c!.%%i>nul if !errorlevel!==0 nbtstat -a !a!.!b!.!c!.%%i>>mac1.txt ) findstr "MAC" mac1.txt>>mac2.txt 远程唤醒(Wake-on-LAN,WOL) 是在计算机电源、主板和网卡等设备支持该功能的前提下,通过向处于半工作状态的网卡发送特定数据包,以实现计算机从停机状态自动启动的一种远程控制技术.所发特定数据包的内容是FFFFFFFFFFFF加上16遍对方网卡的MAC地址,所需MAC地址由此前介绍过的MAC地址扫描子模块来提供.假设对方网卡的MAC地址为00-11-22-33-44-55,那么数据包的内容应为:FFFFFFFFFFFF00112233445500112233445500 112233445500112233445500112233445500112233445 500112233445500112233445500112233445500112233 445500112233445500112233445500112233445500112 2334455001122334455001122334455.网卡收到数据包后与自己的MAC地址相比较,如果相同,便会向主板发送开机信号,使计算机自动开启.本模块用到VB中的Winsock控件,该控件可通过使用TCP或UDP协议与远程计算机交换数据.主要代码如下: With Winsock1 .RemoteHost = "255.255.255.255" ’广播发送 .Protocol = sckUDPProtocol ’使用UDP协议 .RemotePort = 7 ’接收端端口号 .LocalPort = 7 ’发送端端口号 .Bind 7 ’绑定端口 End With 参数配置模块用于接受并保存管理员对软件参数的设置,使软件能够适应不同机房的具体情况.修改后的参数会通过Label控件即时显示于界面上,并同时保存在相应的文本文件中,供其他功能模块使用.为保证输入参数形式上的合法性,本模块设计了相应的判断机制,当输入非法时,会有消息框给出提示. 人机界面使用若干Text控件、Label控件和Command控件实现交互,功能相近或围绕同一功能设置的控件置于同一框架中,清晰简洁、便于操作.当管理员单击标明功用的按钮时,会通过Shell函数调用执行由批处理编写的相应功能模块,完成相应任务.以调用执行MAC地址扫描子模块为例,主要代码如下: Dim i i = Shell("macscan.bat", 0) 其中,“0”表示窗口隐藏,即看不到批处理模块运行时的窗口. VB与批处理两种不同语言编写的程序间是无法通过直接读取对方变量的值来传递数据的,好在VB与批处理均可对文本文件进行读写操作,于是可以利用文本文件做中介实现数据传递.VB采用Line Input # 语句和Write # 语句分别来实现文件的读和写,批处理使用重定向符号<、>、>>来读写文件.例如,参数配置模块接收输入的IP地址后,要先写入文本文件后才能被基于批处理的功能模块读取使用.VB向文本文件写数据的代码如下: Open "ipa.txt" For Output As #1 ’向文件ipa.txt写数据 ipw1 = Text1.Text Write #1, ipw1 Close #1 Open "ipb.txt " For Output As #1 ’向文件ipb.txt写数据 ipw2 = Text2.Text Write #1, ipw2 Close #1 Open "ipc.txt " For Output As #1 ’向文件ipc.txt写数据 ipw3 = Text3.Text Write #1, ipw3 Close #1 Open "ipd.txt " For Output As #1 ’向文件ipd.txt写数据 ipw4 = Text4.Text Write #1, ipw4 Close #1 批处理从文本文件读数据的代码如下: set /p a= set /p b= set /p c= set /p d= 本文设计实现的机房计算机管理软件,发掘了批处理的强大功能,利用了VB在开发具有图形用户界面软件方面的优势,在VB与批处理联合进行程序开发方面做出了探索.开发出的软件具有使用简便、占用空间小、绿色免安装等特点.目前,该软件已应用于机房计算机的管理,其各项功能运行良好,部分性能优于同类商业软件,能有效降低管理员的工作强度,提高机房的管理效率和管理水平.该软件设计思想同样可用于其他数字化设备的批量管理. 参考文献: [1] 孙秀梅,安剑,刘彬彬.Visual Basic开发技术大全[M].2版.北京:人民邮电出版社,2009. [2] 刘宝山,李丕瑾.程序设计基础——Visual Basic 6.0案例教程[M].2版.北京:机械工业出版社,2009. [3] 梁丽平,黄平,黄振中.Visual Basic程序设计[M].2版.北京:北京理工大学出版社,2007. [4] DOS批处理高级教程精选合编[DB/OL]. http://wenku.baidu.com/view/e3a92bf90242a8956bece481.html. [5] TIMOTHY P.自学TCP/IP十四日通[M].北京:学苑出版社,1994. [6] 邹县芳,张发凌.DOS在网络管理及故障诊断中的典型应用[M].北京:人民邮电出版社,2007. [7] AMD.Magic Packet Technology white paper [DB/OL]. http://www.amd.com/products/npd/overview/20212.html.1998.3.4 MAC地址扫描子模块[6]
3.5 远程唤醒子模块[7]
3.6 参数配置模块
3.7 人机界面
3.8 VB程序与批处理程序间的数据传递
4 结 语