zoukankan      html  css  js  c++  java
  • WinXP、Win7脚本自动加域及用户资料迁移

    WinXP、Win7脚本自动加域及用户资料迁移(一)
    最近公司要上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
    NS
    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 "ower 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
    NS
    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 "ower 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,更改计算机名,加域,迁移用户配置文件 基本相同

     401810_1321241694.rar (439.71 KB)

    2012-10-22 21:43, 下载次数: 58

    脚本文件

    本帖最近评分记录
  • 相关阅读:
    ABP实现文件下载
    sqlserver把查询结果转为json和xml
    使用docker安装nginx
    sqlserver 索引优化 sql语句执行分析
    centos7下安装docker教程
    mysql查看sql的执行计划(是否使用索引等)
    vue计算属性和watch的区别有哪些?
    多表连接的三种方式详解 hash join、merge join、 nested loop
    【Winform】所有的dll都打包到一个exe里
    【异常处理】System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.'
  • 原文地址:https://www.cnblogs.com/studio313/p/2742973.html
Copyright © 2011-2022 走看看