今天写写计算机客户端加域的部署情况,虽然公司业务网和办公网计算机部署加域已过去几年了,为部署加域做了很长时间的测试和准备,当然我这里写的是办公网计算机的准备工作和研究,也是比较通用的;业务网计算机因涉及到很多业务软件的运行及权限问题,非常复杂,并且计算机环境也不一样,不具有通用性,所以就只谈谈办公网的加域吧,我这里是在虚拟机测试环境中做的,如需移到生产环境中也只需稍加修改,好了,废话少说了,开始吧!

环境准备:

第一: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:以上仅供学习交流,如果有不正确的地方请各位博友提出,如果觉得好的话请多多支持,以激励我继续写博文,写教程很累的,哈哈!