windows - Script for autologon

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en AD server miljø, og nogle af brugerne har brug for at autologon direkte.


Jeg ved, at jeg kan ændre nogle værdier på RegEdit for at gøre det, og jeg forsøger at oprette et script eller .reg fil for at ændre dem automatisk så jeg har ikke behøvet at indtaste data manuelt i fremtiden, og mine kolleger kan gøre det samme uden at spørge mig .


Indtil videre har jeg følgende linje:


reg add Regedt32.exe "HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogon" /v AutoAdminLogon /t REG\_SZ /d 1


... men det vandt ikke, jeg tror det er fordi jeg har brug for et administrativt login for at foretage disse ændringer.


Er der nogen måde at anmode om en bruger- og adgangskasse, når jeg forsøger at køre scriptet eller en reg-fil? eller hvis nogen har en bedre sintax for mig at bruge dette?

Bedste reference


formodes at du har administratorrettigheder,


autologon.cmd


@echo off
set "\_key\_logon\_=HKEY\_LOCAL\_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"

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


du kan hardcore brugernavn og adgangskode i stedet for at spørge, men det er ikke en god idé


En anden, hvis ikke kører admin, men ved at kende adminoplysninger


@echo off
set "\_key\_logon\_=HKEY\_LOCAL\_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon"
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\%
unadmin.vbs"
echo set oWS ^= CreateObject^("wScript.Shell"^)>"\%\_vbs\_file\_\%"
echo strcmd="C:Windowssystem32
unas.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\%
unadmin.vbs" (set "\_spawn\_=\%TEMP\%
unadmin.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


BEMÆRK: Vær opmærksom på, at adgangskoden er gemt almindelig tekst i DefaultPassword registreringsnøgle