今天写写计算机客户端加域的部署情况,虽然公司业务网和办公网计算机部署加域已过去几年了,为部署加域做了很长时间的测试和准备,当然我这里写的是办公网计算机的准备工作和研究,也是比较通用的;业务网计算机因涉及到很多业务软件的运行及权限问题,非常复杂,并且计算机环境也不一样,不具有通用性,所以就只谈谈办公网的加域吧,我这里是在虚拟机测试环境中做的,如需移到生产环境中也只需稍加修改,好了,废话少说了,开始吧!
环境准备:
第一: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还无法做到自动化更改,必须手动更改,至多就是通过脚本更改如另一篇更改计算机脚本文章http://wuxiaohui.blog.51cto.com/697989/521374
下面开始:
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 = "cc@12345!"
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 If
Select 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:以上仅供学习交流,如果有不正确的地方请各位博友提出,如果觉得好的话请多多支持,以激励我继续写博文,写教程很累的,哈哈!
转载于:https://blog.51cto.com/wuxiaohui/531034