摘要:重新安装计算机机房需要做大量的工作,常见的有修改计算机名,IP地址及相关配置文件等等,所有这些操作将耗费大量时间,精力。利用MAC地址来识别计算机,设计一套软件来自动完成这项工作,将轻松很多。
关键词:MAC地址 INI配置文件 机器名 IP
引言
经过多年的高校微机机房管理工作,经常被重新安装机房弄筋疲力尽。因为重新安装机房需要做大量的工作,常见的有修改计算机名,IP地址,还有一些机房管理软件的配置,考试软件的配置等等,所有这些操作需要耗费大量时间。如果有一个软件能自动帮我们完成这项的工作,那是多么美好的事啊。根据本人的经验和研究,利用VB开发平台,开发出一套自动修改IP、计算机名及相关配置的软件。
设计思想:根据计算机网卡上的MAC地址来修改IP、计算机名等配置。之所以选择用MAC地址来作为关键字,是因MAC地址很容易获得。手工获得MAC地址,只要进入命令窗口输入IPCONFIG /ALL ,网络上也有很多可以收集局域网MAC地址和计算机名的工具,只要扫描一下,就可以搜索出同一网段的MAC地址和计算机名。
接着就是程序设计的问题了,首先要让程序识别到网卡的MAC地址,程序识别网卡MAC地址的方法很多,最常用的有API函数和调用ipconfig 命令。API函数在多网卡或有虚拟网卡的时候会出现认错网卡的问题,处理起来比较复杂,为了简单方便,最后选择了调用ipconfig命令来获得MAC地址。
Public Function strGetNodeID() As String
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cmd /c ipconfig/all >c:\NodeID.txt", 1, True
Set WshShell = Nothing
Dim fso, thefile, ln
Set fso = CreateObject("Scripting.FileSystemObject")
Set thefile = fso.OpenTextFile("c:\NodeID.txt", 1)
Do While thefile.atendofstream <> True
ln = thefile.ReadLine
If InStr(ln, "Physical Address") <> 0 Then
ln = Right(ln, 18)
Exit Do
End If
Loop
thefile.Close
fso.DeleteFile ("c:\NodeID.txt")
Set fso = Nothing
strGetNodeID = Replace(ln, "-", "")
End Function
获得MAC地址之后,再根据数据库中的字段查找到该计算机的机器名、IP地址、及相关配置等相关信息,利用下列函数修改相关的配置。
1 修改计算机IP地址、网关、DNS:
Public Function ChangeIP(IP As String, NM As String, GW As String, MDNS As String, SDNS As String) As String "返回值说明:返回一个设置的中文说明.
Dim strComputer, objWMIService, colNetAdapters, strIPAddress, strSubnetMask
Dim strGateway, strGatewaymetric, strDNS, objNetAdapter, errEnable, errGateways, errDNS
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select*fromWin32_NetworkAdapterConfigurationwhereIPEnabled=TRUE")
strIPAddress = Array(IP)"ip地址
strSubnetMask = Array(NM)"子网掩码
strGateway = Array(GW)"网关
strDNS = Array(MDNS, SDNS) "主DNS各备DNS
strGatewaymetric = Array(1)
For Each objNetAdapter In colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNS)
If errEnable = 0 And errGateways = 0 And errDNS = 0 Then
ChangeIP = "设置成功"
Else
If errEnable = 0 ThenChangeIP = "IP地址和子网掩码设置成功,"
Else ChangeIP = "IP地址或子网掩码设置失败,"
End If
If errGateways = 0 ThenChangeIP = ChangeIP & "网关设置成功,"
Else ChangeIP = ChangeIP & "默认网关设置失败,"
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 End If
If errDNS = 0 ThenChangeIP = ChangeIP & "DNS设置成功"
ElseChangeIP = ChangeIP & "DNS设置失败"
End If
End If
Next
End Function
2 修改计算机名、工作组
Public Function setCName_JoinGroup(CName As String, Joingroup As String) As Boolean
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For Each objComputer In colComputers
Err = objComputer.Rename(CName)"机器名
ReturnValue = objComputer.JoinDomainOrWorkGroup(Joingroup)"工作组
Next
End Function
3 读写ini配置文件,申明API 函数
GetPrivateProfileInt、GetPrivateProfileString、WritePrivateProfileString
" 指定要写的 INI 文件名
Private IniFileName As String,ErrorMsg As String
Private Sub Class_Initialize()
IniFileName = vbNullString
ErrorMsg = vbNullString
End Sub
Public Sub SpecifyIni(FilePathName)
IniFileName = Trim(FilePathName)
End Sub
Private Function NoIniFile() As Boolean
NoIniFile = True
If IniFileName = vbNullString Then
ErrorMsg = "没有指定 INI 文件": Exit Function
End If
ErrorMsg = vbNullString
NoIniFile = False
End Function
Public Function WriteString(Section As String, key As String, value As String) As Boolean
WriteString = False
If NoIniFile() Then Exit Function
If WritePrivateProfileString(Section, key, value, IniFileName) = 0 Then
ErrorMsg = "写入失败": Exit Function
End If
WriteString = True
End Function
Public Function ReadString(Section As String, key As String, Size As Long) As String
Dim ReturnStr As String, ReturnLng As Long
ReadString = vbNullString
If NoIniFile() Then Exit Function
ReturnStr = Space(Size)
ReturnLng = GetPrivateProfileString(Section, key, vbNullString, ReturnStr, Size, IniFileName)
ReadString = Left(ReturnStr, ReturnLng)
End Function
最后:有了这些代码,在主窗口中调用这些函数,就能轻轻松松的设计一套全自动修改计算机配置的小软件了,加入注册表程序,放在启动项runonce里,程序就会实现在计算机安装系统后,第一次启动时加载,进行修改计算机名,IP,及相关的配置文件。
结语
该软件已经成功的运用于我校的计算机机房的系统安装上,节省了大量的人力物力。该软件还可以应用在网吧及其它企业,计算机相对比较多的机房里,进行全自动系统安装。
参考文献
[1] 陈冬亮主编.Visual Basic 6.0程序设计实用教程.机械工业出版社,2008.
[2] 盛明兰,杨芳明编著.Visual Basic程序设计案例汇编.中国铁道出版社,2007.
[3] 高春艳,刘彬彬,王斌编著.Visual Basic开发技术大全.人民邮电出版社,2007.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文