为节省在域控环境下新增计算机加域所需的时间,所以在Windows系统中可以添加自动加域脚本到任务计划程序中去,以实现开机自动加域功能。
脚本:
@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"::设置域控名称(cdjh-test.com)和名称规则(Test-XX)
::域控规则,如cdjh-test.com,则domain_rule为cdjh-test,domain_name为cdjh-test.com
set domain_rule=csdn-test
set domain_name=csdn-test.com
::计算机命名规则,如Test-031则rule_name为Test
set rule_name=Test
::设置kms的激活地址
set kms_adress=kms地址
::网络监测最大化
if "%1%"=="max" goto check_internet
start "" /max "%~nx0" max
exit::判断网络是否正常
:check_internet
ping %domain_name% && goto check_computername
::mode con cols=800 lines=800
for /L %%i in (0,1,9) do color %%iA && timeout /T 1 >nul 2>nul
goto check_internet
::判断是否需要改名
:check_computername
echo %computername% | findstr /i "%rule_name%" >nul && echo 命名正常 && goto check_joindomain
echo 命名异常
goto recomputername:check_joindomain
echo 开始检查加域
wmic ntdomain get domainname | findstr /i "%domain_rule%" && exit
echo 加域异常
goto joindomain
::更改计算机名称
:recomputername
echo 更改计算机名称
color 0A
mode con cols=45 lines=8
echo.
echo ****************更改计算机名称***************
echo.
echo.
::激活计算机,skms后边儿跟自己的激活服务器地址
slmgr /skms %kms_adress% //B
slmgr /ato //B::激活office2019(按需取消注释)
rem cd "C:\Program Files (x86)\Microsoft Office\Office16"
rem cscript ospp.vbs /sethst:%kms_adress%
rem cscript ospp.vbs /act >nulset /p xx=请输入计算机名后缀:
set name=%rule_name%-%xx%
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam" /v @ /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" /v "ComputerName" /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v "ComputerName" /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v "ComputerName" /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d "%name%" /f >nul
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "Hostname" /t REG_SZ /d "%name%" /f >nul
IF %ERRORLEVEL%==0 ( shutdown /r /t 0 && goto joindomain ) else (
set /p xz=改名失败,是否重试?(Y/N)
if /i "%xz%" == "y" goto recomputername else ( echo "更改计算机名称失败" && exit ) )
goto joindomain
::加域操作
:joindomain
sc config LmHosts start= AUTO
net start "TCP/IP NetBIOS Helper"
sc config Browser start= AUTO
net start "computer Browser"
sc config winmgmt start= AUTO
net start "Windows Management Instrumentation"
sc config LanmanServer start= AUTO
sc config LanmanServer start= AUTO
net start "Server"
sc config LanmanWorkstation start= AUTO
net start "Workstation"
cls
echo 加域中,请勿退出!
.\joindomain.vbe "%domain_name%" ::需注意自己创建vbe文件的名称
pause
自动加域需在域控有一个拥有加域权限的账号,在vbs脚本中添加该账号的账号及密码:
On Error Resume Next
dim domain
set domain =createobject("wscript.shell")
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
'Domain Name
strDomain =WScript.Arguments(0)
'administrator member password
strPassword ="CSDN@123" ::域控内拥有加域权限的账号密码
'administrator member
strUser ="JiaYu" ::域控内拥有加域权限的账号
Set objNetwork =CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName
Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\"& _
strComputer &"\root\cimv2:Win32_ComputerSystem.Name='" & _
strComputer & "'")
ReturnValue =objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, strDomain & "\"& strUser, NULL, _
JOIN_DOMAIN + ACCT_CREATE)
'加入域后,必须重启计算机
Set objShell=CreateObject("Wscript.Shell")
objshell.run("cmd.exe /k net user admin Aqck@exit ") ::更改本账户密码
objshell.run("Shutdown.exe -r -t 0")
另外出于安全考虑,需对VBS脚本进行加密。VBS加密脚本使用方法:将VBS脚本拖入VBS加密脚本上后会新增一个相同名称的脚本,脚本后缀.vbe,该后缀为.vbe的脚本就是加密后的VBS脚本。以下是VBS加密脚本:
Option Explicit
dim oEncoder, oFilesToEncode, file, sDest
dim sFileOut, oFile, oEncFile, oFSO, i
dim oStream, sSourceFileset oFilesToEncode = WScript.Arguments
set oEncoder = CreateObject("Scripting.Encoder")For i = 0 to oFilesToEncode.Count - 1
set oFSO = CreateObject("Scripting.FileSystemObject")
file = oFilesToEncode(i)
set oFile = oFSO.GetFile(file)
Set oStream = oFile.OpenAsTextStream(1)
sSourceFile=oStream.ReadAll
oStream.Close
sDest = oEncoder.EncodeScriptFile(".vbs",sSourceFile,0,"")
sFileOut = Left(file, Len(file) - 3) & "vbe"
Set oEncFile = oFSO.CreateTextFile(sFileOut)
oEncFile.Write sDest
oEncFile.Close
Next
脚本部分已完成编写,现在将脚本添加到任务计划程序中
1、鼠标右击“此电脑”-“管理”
2、点击"系统工具"-“任务计划程序”-“任务计划程序库”
3、鼠标右击“任务计划程序库”-“创建基本任务”
创建基本任务名称:你想实现什么功能,就写什么名称。然后点击“下一步”
触发器:因为新增电脑加域要登录本地账号进行加域操作,所以这里选择“当前用户登录时”,然后点击“下一步”
操作:选择“启动程序”,然后点击“下一步”
启动程序:程序或脚本要选择bat脚本,且注意bat脚本需和加密后的vbs脚本放在同一目录下,然后点击“下一步”
核对配置信息,无问题后点击“完成”
这样就可以在“任务计划程序库”中看到刚刚添加的任务计划程序了
然后就是重启电脑测试电脑加域脚本是否生效,如果加域出现问题请仔细阅读加域脚本,调整必要参数后重试。