今天写写计算机客户端加域的部署情况,虽然公司业务网和办公网计算机部署加域已过去几年了,为部署加域做了很长时间的测试和准备,当然我这里写的是办公网计算机的准备工作和研究,也是比较通用的;业务网计算机因涉及到很多业务软件的运行及权限问题,非常复杂,并且计算机环境也不一样,不具有通用性,所以就只谈谈办公网的加域吧,我这里是在虚拟机测试环境中做的,如需移到生产环境中也只需稍加修改,好了,废话少说了,开始吧!
环境准备:
第一:2台已经配置好的AD主机如:kp-dc01.yunwei.cc.cmb和kp-dc02.yunwei.cc.cmb,IP地址分别为:192.168.1.51,192.168.1.52;一台未加域的xp客户端test,IP为:192.168.1.101
第二:客户端管理员密码和AD账号密码相同(在实际环境中客户端电脑都是通过网络ghost做的系统,本地管理员密码都一样并且保密,可以在AD上创建一个和客户端本地管理员一样的域账号和密码,用作访问共享用)
第三:计算机名和IP需提前部署好,计算机名和IP设计是需要提前规划好的,并且具有很大的扩展性,否则你动不动就随便更改的话,要是碰到大规模的计算机部署,你估计要崩溃,因为目前计算机和IP还无法做到自动化更改,必须手动更改,至多就是通过脚本更改如另一篇更改计算机脚本文章
下面开始:
1.在AD主机上新建文件夹“加域脚本”并设置共享权限:Everyone读取权限;设置安全权限:Everyone读取运行权限。
2.准备好以下文件并放入到前面设置的共享文件家“加域脚本内”(这个后面会给出每个文件)
3.在域中创建域账户:AddAD,并委派控制该账户将计算机加入域的权限。
4.在客户端xp用本地管理登录计算机,访问共享:\\192.168.1.52,打开“加域脚本”
5.运行1.bat,根据提示操作,运行完后会在桌面上创建一个快捷方式:3并自动重启电脑。
6.再次登录客户端计算机后运行桌面上的3.根据提示操作后自动重启。
7.加域完毕。
*************************************************************************
以下附上脚本文件:
1.bat文件如下:
@echo off
echo ============================================================== echo NAME:1.bat echo 功能:更改计算机SID,调用2.bat创建快捷方式3.vbs到桌面并重启计算机。 echo ============================================================== pause echo 开始运行Newsid,以更改计算机SID,此过程较长,请耐心等待...\\192.168.1.51\加域脚本\newsid.exe /a /n echo SID更改完毕,调用2.bat创建3.vbs桌面快捷方式。 call \\192.168.1.51\加域脚本\2.bat echo ============================================================== echo * 请务必重新启动计算机后再运行“第二步” (即 3.vbs) * echo ============================================================== echo 按任意键重启计算机... pause shutdown -r -t 0 -f
2.bat如下:
cd.>test.vbs
for /f "usebackq skip=4 tokens=*" %%a in (%0) do @echo %%a>>test.vbs test.vbs&del test.vbs /q goto :eof set WshShell = WScript.CreateObject("WScript.Shell") strDesktop = WshShell.SpecialFolders("Desktop") set oShellLink = WshShell.CreateShortcut(strDesktop & "\3.lnk") oShellLink.TargetPath = "\\192.168.1.51\加域脚本\3.vbs" oShellLink.WorkingDirectory = "\\192.168.1.51\加域脚本" oShellLink.Save '建立快捷方式3.vbs如下:
'==============================================================
' NAME:3.vbs ' 使用:配合1.bat使用,1.bat执行完毕,计算机重启后,方可运行3.vbs ' 功能:将计算机加入域中,需要将本脚本和netdom.exe放置在同一目录下 '==============================================================On Error Resume Next
'定义常量
strDestDomain = "yunwei.cc.cmb" strNetBIOSDomain = "yunwei" strOU = "ou=computers,ou=test,dc=yunwei,dc=cc,dc=cmb" strDUserName = "yunwei\AddAD" strDPWD = "!" strSupportMsg = "故障报告和技术支持,请联系系统管理员。" arrDNSServers = Array("192.168.1.51", "192.168.1.52")'修改注册表,取消自动登陆选项
const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set StdOut = WScript.StdOut Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" strValueName = "AutoAdminLogon" strValue = "0" oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue'判断netdom.exe是否在同一目录下
Set objFSO=CreateObject("Scripting.FileSystemObject") If Not objFSO.FileExists("netdom.exe") Then MsgBox "没有找到 netdom.exe,请确认该文件已经和脚本放置在同一目录下",vbCritical+vbOKOnly,"AD实施工具" WScript.Quit End If'获取系统变量
'HKLM = HKEY_LOCAL_MACHINE Set WshShell = Wscript.CreateObject("WScript.Shell") Set WshSysEnv = WshShell.Environment("Process") strComputerName = WshSysEnv("Computername") strCurrentUSER = WshSysEnv("Username") strCurrentDomain = WshSysEnv("Userdomain") strSysDrive = WshSysEnv("SYSTEMDRIVE")'判断操作系统
strWin98="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Version" If KeyExists(strWin98) = True Then strOSType="Win98" else strOSType="WinNT" End IfSelect Case strOSType
Case "Win98"
Msgbox "不应该在Windows 98上运行本脚本。",vbinformation+vbOKOnly,"AD实施工具" Case "WinNT" '判断是否已经在目标域中 strRegDomain=WshShell.RegRead ("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NV Domain") If strCurrentDomain = strNetBIOSDomain OR strRegDomain = strDestDomain Then MsgBox "您的计算机已经在 " &strDestDomain &" 域中,不需要运行该脚本",vbOkOnly,"AD实施工具" WScript.Quit Else MsgBox "将您的计算机加入到" &strDestDomain &"域中,请耐心等待程序运行结束,如有弹出提示请允许运行",vbOkOnly+vbInformation,"AD实施工具" End If'修改DNS服务器地址
Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputerName & "\root\cimv2") Set colNetCards = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") For Each objNetCard in colNetCards objNetCard.SetDNSServerSearchOrder(arrDNSServers) Next'确保Netlogon服务没有被禁用,确保RemoteRegistry、DNSClint和LMHosts服务启动
Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colItems = objWMIService.ExecQuery( _ "Select * from Win32_Service where " _ &"(Name ='Netlogon') " _ &"AND StartMode <> 'Automatic'") For Each objItem in colItems objItem.ChangeStartMode "Automatic" Next Set colItems = objWMIService.ExecQuery( _ "Select * from Win32_Service where " _ &"(Name = 'RemoteRegistry' OR Name = 'LmHosts' OR Name = 'DNSCache') " _ &"AND (StartMode <> 'Automatic' OR State = 'Stopped')") For Each objItem In colItems objItem.ChangeStartMode "Automatic" objItem.StartService() Next Set objWMIService = Nothing'确保加入域后DNS后缀正确更改
Key = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SyncDomainWithMembership" WshShell.RegWrite Key,1,"REG_DWORD"'调用Netdom.exe,执行加入域的操作
command="netdom.exe JOIN " &strComputerName & " /Domain:" &strDestDomain & " /ou:" &strOU & " /userd:" &strDuserName & " /passwordd:" & strDPWD Return = WshShell.Run(Command,0,True)'删除桌面快捷方式3.lnk
Dim fso,file scn1="3.lnk" Set WshShell = Wscript.CreateObject("Wscript.Shell") strDesktop = WshShell.SpecialFolders("Desktop")Set fso=CreateObject("Scripting.FileSystemObject")
Set fld=fso.GetFolder(strDesktop)
For Each file In fld.Files scn=fso.GetFileName(file) If scn=scn1 Then file.Delete End If Next'判断是否加入成功,询问是否启动计算机
If Return = 0 Then '记录用户名和计算机名到c:\AD\ComputerLogon.txt Set objFSO = CreateObject("Scripting.FileSystemObject") Set f = objFSO.CreateFolder("C:\AD") strCommand = "%COMSPEC% /C ECHO y|CACLS.EXE C:\AD /T /G Everyone:F" objWshShell.Run strCommand, 0, True Set objfile = objFSO.OpenTextFile("C:\AD\ComputerLogon.txt", 2, True) objfile.Write strCurrentUSER &VbCrLf &strComputerName &VbCrLf &strSysDrive objfile.close Set objFSO = Nothing WshShell.RegWrite "HKLM\Software\Microsoft\Windows NT\Done",1,"REG_DWORD" Set WshSehll = Nothing reboot = MsgBox("需要立即重新启动计算机,以完成操作。"&vbCrlf _ &"* 请保存所有当前工作后,点击“是”立即重新启动计算机;"&vbCrlf _ &"* 或者点击“否”,稍后重启",vbYesNo,"AD实施工具") If reboot = vbYes Then Set OpSysSet = GetObject("winmgmts:{(Shutdown)}").ExecQuery("select * from Win32_OperatingSystem where Primary=true") For Each OpSys In OpSysSet OpSys.Reboot() Next Else MsgBox "请您尽快重新启动计算机,以使修改生效。",vbOkOnly+vbInformation,"AD实施工具" End If Else MsgBox "操作失败,请检查网络连接和配置是否正确,并请求管理员协助。" &vbCrLf &strSupportMsg ,vbOkOnly+vbInformation,"AD实施工具" End If End Select'定义检查注册表键值是否存在的函数KeyExists()
Function KeyExists(key) Dim key2 On Error Resume Next key2 = WshShell.Regread(key) If Err <> 0 Then KeyExists = False Else KeyExists = True End If On Error GoTo 0 End Function 4.netdom文件可以在windows2003系统盘找到。5.newsid.exe工具自己去找。当然如果你在做系统的时候 对系统进行封装的话那就不需要这个了。
PS:以上仅供学习交流,如果有不正确的地方请各位博友提出,如果觉得好的话请多多支持,以激励我继续写博文,写教程很累的,哈哈!