本文轉自:http://bbs.51cto.com/thread-968398-1.html
最近公司要上AD域項目,所有的用戶全部從工作組環境切換到域環境,本地賬號遷移到域賬號。因客戶端比較多,仔細研究了一下微軟的加域和用戶遷移工具,結合在網上搜到的一些腳本,自己編寫了一個Windows Xp,Windows 7自動加域及自動遷移用戶配置文件的腳本。
(工具已上傳,其中USMT由於太大,請自行下載或者到裝有win AIK的系統中提取,版本是4.0,記得將x86及x64版本的copy到對應目錄下)
腳本預覽:
該腳本使用到了幾個工具:
1、Netdom.exe:計算機加域用到,XP和Windows 7須使用不同版本,可分別去2003和2008系統光盤里找。其中Windows 7還要使用到netdom.exe.mui文件,該文件可到 2008系統 %windir%\system32\en-US\目錄下復制。
2、moveuser.exe:XP系統遷移用戶配置工具,網上下載或2003系統里面找。
3、USMT 4.0工具包:Windows 7用戶配置遷移工具。網上下載,如果有安裝Win AIK的,可以直接去目錄下找,具體路徑忘記了。其實這個工具的低版本也可以遷移XP系統,不過感覺比較復雜。
一、目錄准備
收集齊了這幾個工具,先在C盤根目錄下創建Domain_Migration目錄,該目錄結構如下圖:USMT,Win7,XP三個目錄以及Auto.bat、NewSID和使用說明幾個文件
Xp文件夾下放moveuser.exe,netdom.exe,XpAutoAddDomain.bat
Win7文件夾分為下放netdomx64和netdomx86文件夾和Win7x64AutoAddDomain.bat和Win7x86AuroDomain.bat文件,其中netdom中放置netdom.exe,netdom.exe.mui文件,因為X64和x86平台下需要不同的netdom文件 

二、使用說明
1、將Domain_Migration文件夾復制到C盤根目錄
2、以管理員身份運行 Auto.bat
3、如果是XP系統,第一步建議先重置系統SID,更改計算機名和系統SID后重啟(win7可跳過此步);重啟后再次運行Auto.bat
4、選擇系統類型,按照提示操作,更改計算機名后必須重啟,再次運行Auto.bat加域
5、加域后重啟,使用臨時域管理員登陸,再次運行Auto.bat轉移用戶配置文件
轉移完成后,注銷,使用域賬號登陸
6、刪除Domain_Migration文件夾
三、bat文件詳細說明
@echo off
color 1e
title XXX公司加域遷移用戶數據腳本
echo 請用系統管理員帳戶運行本程序,否則加域操作無法正常進行!
echo.
ECHO
******選擇操作系統類型*******
:START
echo.
echo
1: 重置系統SID(NewSID)
echo
2: WindowsXP
echo
3: Windows7 x86
echo
4: Windows7 x64
echo
q: Quit
echo.
SET /P OS_type=系統類型[1-4 or q]:
IF "%OS_type%"=="q" GoTo EOF
IF "%OS_type%"=="1" GoTo Newsid
IF "%OS_type%"=="2" GoTo WinXP
IF "%OS_type%"=="3" GoTo Win7x86
IF "%OS_type%"=="4" GoTo Win7x64
echo 選擇有誤,請重新選擇 & GoTo START
:WinXp
echo 你選擇了WinXP系統!
call "c:\Domain_Migration\xp\XpAutoAddDomain.bat"
exit
:Win7x86
echo 你選擇了Win7系統32位!
if not exist "%windir%\system32\netdom.exe" copy "c:\Domain_Migration\win7\netdomx86\netdom.exe" "%windir%\system32" /y
if not exist "%windir%\system32\zh-CN\netdom.exe.mui" copy "c:\Domain_Migration\win7\netdomx86\netdom.exe.mui" "%windir%\system32\zh-CN\" /y
if not exist "%windir%\system32\en-US\netdom.exe.mui" copy "c:\Domain_Migration\win7\netdomx86\netdom.exe.mui" "%windir%\system32\en-US\" /y
REM 調用Windows 7 x86加域遷移腳本
call "c:\Domain_Migration\win7\Win7x86AutoAddDomain.bat"
exit
:Win7x64
echo 你選擇了Win7系統64位!
if not exist "%windir%\system32\netdom.exe" copy "c:\Domain_Migration\win7\netdomx64\netdom.exe" "%windir%\system32" /y
if not exist "%windir%\system32\zh-CN\netdom.exe.mui" copy "c:\Domain_Migration\win7\netdomx64\netdom.exe.mui" "%windir%\system32\zh-CN\" /y
if not exist "%windir%\system32\en-US\netdom.exe.mui" copy "c:\Domain_Migration\win7\netdomx64\netdom.exe.mui" "%windir%\system32\en-US\" /y
REM 調用Windows 7 x64加域遷移腳本
call "c:\Domain_Migration\win7\Win7x64AutoAddDomain.bat"
exit
:Newsid
echo 你選擇了重置系統SID並改計算機名
set a=%computername%
echo 當前計算機名為:%a%
set /p newname=將用 NewSID 重置SID並改計算機名,請輸入新計算機名:
if "%newname%"=="" echo 計算機名不能為空,請重新選擇。&pause&endlocal&cls&goto Start
echo 即將更新SID,計算機名將從 %computername% 更改為 %Newname% 注:更改SID完成后將重新啟動計算機
pause
c:\Domain_Migration\newsid /a %Newname%
goto end
:EOF
Exit
**************************************************************************************************************************
REM 腳本結束
2、WinXPAutoAddDomain.bat,更改計算機名,加域,遷移用戶配置文件
@echo off
color 1e
cd /d C:\Domain_Migration\xp
::功能說明與使用說明注意事項
ECHO 請在使用本腳本前修改相應的參數為實際值
set dns1=10.2.0.51
set dns2=10.2.0.41
REM 請設置自己真實環境的域名、域管理員賬號和密碼
set domainname=xxx.com
set domainadminname=xxx@xxx.com
set domainadminpassword=xxx
::判斷是否已經加入域,如果加入了則直接跳轉
::wmic ntdomain get domainname | findstr /i "%domainname%
::if %errorlevel% equ 0 echo 該計算機已經加入域 && goto moveuser
ipconfig /all | findstr /i "%domainname%" >nul && echo 該計算機已經加入域,准備轉移配置文件 && goto moveuser
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷當前登陸用戶是否有管理員權限,如果沒有則注銷后重新以管理員登陸
:admin
ECHO ************************判斷當前用戶權限******************
net user %username% | findstr "*Administrators"
if %errorlevel% equ 1 (echo 當前用戶不是本地管理員,請注銷后使用有本地管理員權限的用戶登錄) else (goto DNS)
set /p logoff=現在要注銷嗎
if /i "%logoff%"=="y" logoff
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷當前DNS設置是否為指定地址,如果不是,則清空當前配置后重新設置DNS
:DNS
ECHO *************************更改DNS****************************
netsh interface ip show dns | findstr "%dns1%" 1>nul && echo DNS已經設置為%dns1% && goto renamecomputername
echo 清理更改現有DNS...
for /f "skip=2 tokens=2,* " %%i in ('netsh interface show interface') do (
set netname=%%j
if "%%j"=="環回" goto back
if "%%j"=="內部" goto back
netsh interface ip delete dns name="%%j" addr=all >nul
netsh interface ip add dns name="%%j" addr=%dns1% index=1 >nul
netsh interface ip add dns name="%%j" addr=%dns2% index=2 >nul
)
:back
echo DNS更改完成
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷計算機名是否已經更改,如更改則進入下一部分;如未更改是否需要更改計算機名,更改完成后要求重新啟動計算機
:renamecomputername
ECHO *********************更改計算機名****************************
set a=%computername%
echo 當前計算機名為:%a%
set /p b=請輸入要修改的計算機名稱(跳過請輸入s):
if /i "%b%"=="s" goto joindomain
if /i "%b%"=="" echo 計算機名不能為空 && goto renamecomputername
wmic computersystem Where name="%a%" call rename "%b%" >nul
if %errorlevel% equ 1 (echo 更改計算機名失敗,請手工更改 && pause && exit) else (echo 計算機名已更改為%b%)
set /p reboot=更改計算機名完成,現在要重起嗎?y/n:
if /i "%reboot%"=="y" shutdown /r /t 0
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷計算機是否已加入域,如加入域則繼續下一部分;否則檢查相應服務是否啟動,自動加入域(用戶名密碼部分參數需要自行更改)
:joindomain
ECHO ***********************計算機加入域*************************
if /i "%userdomain%"=="%domainname%" goto moveuser
rem 判斷服務TCP/IP NetBIOS HELPER服務是否禁用或未啟動,如果禁用則更改為自動,未啟動則自動啟動,否則顯示服務已啟動
sc query state= inactive | findstr /c:"TCP/IP NetBIOS" && (echo 服務未啟動,正在啟動服務... && sc config lmhosts start= auto && sc start lmhosts) || echo 服務已啟動
if /i "%userdomain%"=="%domainname%" do (echo 計算機已加入域 && goto moveuser)
if not exist netdom.exe echo 請將netdom工具放到同文件夾下再嘗試運行 && goto end
.\netdom join %computername% /Domain:%domainname% /UserD:%domainadminname% /PasswordD:%domainadminpassword% || echo 加入域失敗,請檢查網絡環境及批處理參數是否正確 && goto end
set /p shutdown=加入域完成,現在要重起嗎?y/n:
if /i "%shutdown%"=="y" shutdown /r /t 0
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::使用moveuser工具對用戶配置文件進行遷移(提示用戶輸入要遷移的用戶和要遷移到的用戶)
:moveuser
ECHO *********************用戶配置文件遷移*************************
if not exist moveuser.exe echo 請將MOVEUSER工具放到同文件夾下再嘗試運行 && goto end
net user
:retry
set /p user=請輸入你要遷移的本地用戶賬戶名稱:
if /i "%user%"=="%username%" echo 轉移的用戶配置文件為當前登陸用戶,請重新啟動后使用域管理員登陸再進行轉移 && goto end
net user %user% 2>nul 1>nul || echo 你輸入的本地賬戶不存在,請重新輸入 && goto retry
set /p domainuser=請輸入你要遷移到的域賬號名稱:
net user %domainuser% /domain 2>nul 1>nul
if %errorlevel% neq 0 (echo 你要轉移到的域賬戶尚未建立,請建立后重新嘗試遷移) && goto end 本文來自菜鳥技術網
moveuser %user% %domainname%\%domainuser% /k /y | findstr /i "failed" 2>nul 1>nul && echo 用戶配置文件遷移失敗,請檢查配置 && goto end
::if %errorlevel% neq 0 echo 用戶配置文件遷移失敗,請檢查配置 && goto end
::如果是從本機管理員用戶遷移,則域用戶也變成管理員,此處刪除域用戶管理員權限,加入PowerUsers群組,可自行更改
echo 更改域用戶為Power User權限
net localgroup administrators %domainname%\%domainuser% /delete
net localgroup "Power Users" %domainname%\%domainuser% /add
echo 配置文件遷移成功,請注銷后使用您的域賬號登陸
set /p logoff=現在要注銷嗎?y/n:
if /i "%logoff%"=="y" logoff
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::結束退出
:end
pause>nul
exit
******************************************************************************************************************************
REM 腳本結束
3、Win7AutoAddDomain.bat,更改計算機名,加域,遷移用戶配置文件
@echo off
color 1e
::功能說明與使用說明注意事項
ECHO 請在使用本腳本前修改相應的參數為實際值
set dns1=10.2.0.51
set dns2=10.2.0.41
REM 請設置自己真實環境的域名、域管理員賬號和密碼
set domainname=xxx.com
set domainadminname=xxx@xxx.com
set domainadminpassword=xxx
::判斷是否已經加入域,如果加入了則直接跳轉
::wmic ntdomain get domainname | findstr /i "%domainname%
::if %errorlevel% equ 0 echo 該計算機已經加入域 && goto moveuser
ipconfig /all | findstr /i "%domainname%" >nul && echo 該計算機已經加入域,准備轉移配置文件 && goto moveuser
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷當前登陸用戶是否有管理員權限,如果沒有則注銷后重新以管理員登陸
:admin
ECHO ************************判斷當前用戶權限******************
net user %username% | findstr "*Administrators"
if %errorlevel% equ 1 (echo 當前用戶不是本地管理員,請注銷后使用有本地管理員權限的用戶登錄) else (goto DNS)
set /p logoff=現在要注銷嗎
if /i "%logoff%"=="y" logoff
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷當前DNS設置是否為指定地址,如果不是,則清空當前配置后重新設置DNS
:DNS
ECHO *************************更改DNS****************************
netsh interface ip show dns | findstr "%dns1%" 1>nul && echo DNS已經設置為%dns1% && goto renamecomputername
echo 清理更改現有DNS...
for /f "skip=2 tokens=2,* " %%i in ('netsh interface show interface') do (
set netname=%%j
if "%%j"=="環回" goto back
if "%%j"=="內部" goto back
netsh interface ip delete dns name="%%j" addr=all >nul
netsh interface ip add dns name="%%j" addr=%dns1% index=1 >nul
netsh interface ip add dns name="%%j" addr=%dns2% index=2 >nul
)
:back
echo DNS更改完成
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷計算機名是否已經更改,如更改則進入下一部分;如未更改是否需要更改計算機名,更改完成后要求重新啟動計算機
:renamecomputername
ECHO *********************更改計算機名****************************
set a=%computername%
echo 當前計算機名為:%a%
set /p b=請輸入要修改的計算機名稱(跳過請輸入s):
if /i "%b%"=="s" goto joindomain
if /i "%b%"=="" echo 計算機名不能為空 && goto renamecomputername
wmic computersystem Where name="%a%" call rename "%b%" >nul
if %errorlevel% equ 1 (echo 更改計算機名失敗,請手工更改 && pause && exit) else (echo 計算機名已更改為%b%)
set /p reboot=更改計算機名完成,現在要重起嗎?y/n:
if /i "%reboot%"=="y" shutdown /r /t 0
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::判斷計算機是否已加入域,如加入域則繼續下一部分;否則檢查相應服務是否啟動,自動加入域(用戶名密碼部分參數需要自行更改)
:joindomain
ECHO ***********************計算機加入域*************************
if /i "%userdomain%"=="%domainname%" goto moveuser
rem 判斷服務TCP/IP NetBIOS HELPER服務是否禁用或未啟動,如果禁用則更改為自動,未啟動則自動啟動,否則顯示服務已啟動
sc query state= inactive | findstr /c:"TCP/IP NetBIOS" && (echo 服務未啟動,正在啟動服務... && sc config lmhosts start= auto && sc start lmhosts) || echo 服務已啟動
if /i "%userdomain%"=="%domainname%" do (echo 計算機已加入域 && goto moveuser)
netdom join %computername% /Domain:%domainname% /UserD:%domainadminname% /PasswordD:%domainadminpassword% || echo 加入域失敗,請檢查網絡環境及批處理參數是否正確 && goto end
echo 加入域完成,重啟電腦后請使用域管理員帳戶登陸轉移個人配置文件!
set /p shutdown=現在要重起嗎?y/n:
if /i "%shutdown%"=="y" shutdown /r /t 0
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::使用moveuser工具對用戶配置文件進行遷移(提示用戶輸入要遷移的用戶和要遷移到的用戶)
:moveuser
ECHO *********************用戶配置文件遷移*************************
net user
:retry
set /p user=請輸入你要遷移的本地用戶賬戶名稱:
if /i "%user%"=="%username%" echo 轉移的用戶配置文件為當前登陸用戶,請重新啟動后使用域管理員登陸再進行轉移 && goto end
net user %user% 2>nul 1>nul || echo 你輸入的本地賬戶不存在,請重新輸入 && goto retry
set /p domainuser=請輸入你要遷移到的域賬號名稱:
net user %domainuser% /domain 2>nul 1>nul
if %errorlevel% neq 0 (echo 你要轉移到的域賬戶尚未建立,請建立后重新嘗試遷移) && goto end
cd /d C:\Domain_Migration\USMT\x86
echo 正在備份個人配置文件,請耐心等候......
scanstate \\fileserver\migration\%computername%-%user% /c /i:miguser.xml /i:migapp.xml /v:13 /ue:*\* /ui:%computername%\%user% /l:scan.log /localonly /o /efs:copyraw
echo 正在轉移個人配置文件,請耐心等候......
loadstate \\fileserver\migration\%computername%-%user% /mu:%computername%\%user%:%domainname%\%domainuser% /i:miguser.xml /i:migapp.xml /v:13
echo 將域賬號加入本地PowerUser群組
net localgroup administrators %domainname%\%domainuser% /delete
net localgroup "Power Users" %domainname%\%domainuser% /add
echo 刪除臨時文件
del "%windir%\system32\netdom.exe"
del "%windir%\system32\zh-CN\netdom.exe.mui"
del "%windir%\system32\en-US\netdom.exe.mui"
echo 配置文件遷移成功,請注銷后使用您的域賬號登陸
set /p logoff=現在要注銷嗎?y/n:
if /i "%logoff%"=="y" logoff
goto end
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::結束退出
:end
pause>nul
exit
***************************************************************************************************************************************
REM 腳本結束
4、Win7x64AutoAddDomain.bat,更改計算機名,加域,遷移用戶配置文件
和Win7x86AutoAddDomain.bat,更改計算機名,加域,遷移用戶配置文件 基本相同
