Скрипт для автологона - PullRequest
0 голосов
/ 04 мая 2018

У меня есть окружение сервера AD, и некоторым пользователям необходимо автоматически выполнить автозапуск.

Я знаю, что для этого могу изменить некоторые значения на RegEdit, и я пытаюсь создать скрипт или .reg файл для их автоматического изменения, , поэтому мне не нужно вводить данные вручную в будущем, и мои коллеги могут сделать то же самое, не спрашивая меня .

Пока у меня есть следующая строка:

reg add Regedt32.exe "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1

… но это не сработает, я думаю, это потому, что мне нужны административные данные для внесения этих изменений.

Есть ли способ запросить окно с именем пользователя и паролем, когда я пытаюсь запустить скрипт или файл reg? или если у меня есть лучший синтаксис для меня, чтобы использовать это?

1 Ответ

0 голосов
/ 05 мая 2018

предполагается, что у вас есть права администратора,

autologon.cmd

@echo off
set "_key_logon_=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

echo User to be Autologged 
set/P user="*     user: "
set "psCmd=powershell -Command "$pwd = read-host '* password' -AsSecureString; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /F "usebackq delims=" %%P in (`%psCmd%`) do set "pass=%%P"

:setReg
reg add "%_key_logon_%" /V "AutoAdminLogon" /T REG_SZ /D "1" /F >NUL 2>&1
reg add "%_key_logon_%" /V "DefaultUserName" /T REG_SZ /D "%user%" /F >NUL 2>&1
reg add "%_key_logon_%" /V "DefaultPassword" /T REG_SZ /D "%pass%" /F >NUL 2>&1
exit/B 0

вы можете хардкор имя пользователя и пароль вместо запроса, но уверен, что это НЕ хорошая идея

Еще один, если не работает администратор, но знает учетные данные администратора

@echo off
set "_key_logon_=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
set "user=%~1"
set "pass=%~2"
if "%user%" neq "" if "%pass%" neq "" goto :setReg

rem admin credentials
echo Sign in with your ADM ID  
set/P adminUser="*     user: "
call:getPass adminPass

rem test credentials
call :askIsAdmin || (echo Invalid credentials or not enough rights. & exit /B)

rem user credentials
echo/  
echo User to be Autologged 
set/P user="*     user: "
call:getPass pass

rem now elevate
call :elevateScript && exit /B 0

:setReg
reg add "%_key_logon_%" /V "AutoAdminLogon" /T REG_SZ /D "1" /F >NUL 2>&1
reg add "%_key_logon_%" /V "DefaultUserName" /T REG_SZ /D "%user%" /F >NUL 2>&1
reg add "%_key_logon_%" /V "DefaultPassword" /T REG_SZ /D "%pass%" /F >NUL 2>&1
exit/B 0

rem helper pass reader
:getPass
SetLocal
set "psCmd=powershell -Command "$pwd = read-host '* password' -AsSecureString; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd); [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /F "usebackq delims=" %%P in (`%psCmd%`) do set "pwd=%%P"
if "%pwd%" EQU "" EndLocal & exit/B 1
EndLocal & set "%1=%pwd%"
doskey /listsize=0 >NUL 2>&1 & doskey /listsize=50 >NUL 2>&1        & rem clear keyboard buffer
exit/B 0

rem helper admin rights tester
:askIsAdmin
set "psCmd=powershell -Command "$p='%adminPass%'^|convertto-securestring -asplaintext -force;$c=new-object -typename system.management.automation.pscredential^('%adminUser%',$p^);start-process 'powershell' '-Command "write-host ^([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent^(^)^).IsInRole^([Security.Principal.WindowsBuiltInRole]::Administrator^)"' -credential $c -passthru -wait;""
for /F "usebackq delims=" %%A in (`%psCmd%`) do @set "result=%%A"
echo %result% | find /I "true">NUL 2>&1 && set/A ret=0
EndLocal & exit/B %ret%
exit/B 1

rem helper elevate script
:elevateScript
SetLocal
set "_vbs_file_=%TEMP%\runadmin.vbs"
echo set oWS ^= CreateObject^("wScript.Shell"^)>"%_vbs_file_%"
echo strcmd="C:\Windows\system32\runas.exe /user:%COMPUTERNAME%\%adminUser% " + """%~f0 %user% %pass%""">>"%_vbs_file_%"
echo oWS.run strcmd, 2, false>>"%_vbs_file_%"
echo wScript.Sleep 100>>%_vbs_file_%
echo oWS.SendKeys "%adminPass%{ENTER}">>%_vbs_file_%
if exist "%TEMP%\runadmin.vbs" (set "_spawn_=%TEMP%\runadmin.vbs") else (set "_spawn_=runadmin.vbs")
ping 1.1.1.1 -n 1 -w 50 >NUL
start /B /WAIT cmd /C "cls & "%_spawn_%" & del /F /Q "%_spawn_%" 2>NUL"
EndLocal
exit/B 0

ПРИМЕЧАНИЕ: учтите, что пароль хранится в виде простого текста в DefaultPassword ключ реестра

...