diff --git a/tools/autologon_einrichten.ps1 b/tools/autologon_einrichten.ps1 index 281e20f..f13ed0a 100644 --- a/tools/autologon_einrichten.ps1 +++ b/tools/autologon_einrichten.ps1 @@ -71,8 +71,10 @@ Write-Host "==================================================================" Write-Host " SCHRITT 1 - Auto-Logon aktivieren (verschluesseltes LSA-Secret)" Write-Host "==================================================================" Write-Host " Benutzer: $env:USERNAME Domaene: $env:COMPUTERNAME (lokal)" -Write-Host "" -if ($Direkt) { +# Aktivierung ohne Dialog — als Funktion, damit sie auch als Rueckfall nach +# einem abgebrochenen Dialog aufgerufen werden kann (sonst muesste der Nutzer +# das Skript ein drittes Mal starten). +function Invoke-DirektAktivierung { # ⚠ Read-Host -AsSecureString: die Eingabe erscheint nicht auf dem Schirm # und landet nicht in der PowerShell-History. $sec = Read-Host " Passwort fuer $env:USERNAME (Eingabe bleibt unsichtbar)" -AsSecureString @@ -80,16 +82,22 @@ if ($Direkt) { try { $pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr) if (-not $pw) { - Write-Host " ABBRUCH: kein Passwort eingegeben." -ForegroundColor Red - exit 1 + Write-Host " Kein Passwort eingegeben." -ForegroundColor Red + return $false } Write-Host " Aktiviere Auto-Logon ..." $null = & $exe $env:USERNAME $env:COMPUTERNAME $pw /accepteula 2>&1 + return $true } finally { # Klartext so kurz wie moeglich im Speicher halten [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) Remove-Variable pw -ErrorAction SilentlyContinue } +} + +Write-Host "" +if ($Direkt) { + if (-not (Invoke-DirektAktivierung)) { exit 1 } } else { Write-Host " Es oeffnet sich gleich der Autologon-Dialog." -ForegroundColor Cyan Write-Host " --> Passwort eintragen und auf ENABLE klicken." -ForegroundColor Cyan @@ -109,17 +117,33 @@ Write-Host "" Write-Host " AutoAdminLogon : $(if ($an) { $an } else { '(nicht gesetzt)' })" Write-Host " DefaultUserName : $(if ($user) { $user } else { '(nicht gesetzt)' })" +# ⚠ RUECKFALL statt Sackgasse: schlaegt der Dialog-Weg fehl, wird hier direkt +# angeboten, es ohne Dialog zu erledigen — sonst muesste das Skript ein drittes +# Mal von Hand gestartet werden (real zweimal passiert). +if (-not $aktiv -and -not $Direkt) { + Write-Host "" + Write-Host " ==> Der Dialog wurde ohne 'Enable' geschlossen." -ForegroundColor Yellow + $a = Read-Host " Jetzt ohne Dialog erledigen? (j/n)" + if ($a -match '^[jJyY]') { + if (Invoke-DirektAktivierung) { + $an = (Get-ItemProperty -Path $k -Name AutoAdminLogon -EA SilentlyContinue).AutoAdminLogon + $user = (Get-ItemProperty -Path $k -Name DefaultUserName -EA SilentlyContinue).DefaultUserName + $klartext = (Get-ItemProperty -Path $k -Name DefaultPassword -EA SilentlyContinue).DefaultPassword + $aktiv = ($an -eq '1') + Write-Host "" + Write-Host " AutoAdminLogon : $(if ($an) { $an } else { '(nicht gesetzt)' })" + Write-Host " DefaultUserName : $(if ($user) { $user } else { '(nicht gesetzt)' })" + } + } +} + if (-not $aktiv) { Write-Host "" Write-Host " ==> AUTO-LOGON IST NICHT AKTIV." -ForegroundColor Yellow - if ($Direkt) { - Write-Host " Autologon hat die Angaben nicht uebernommen —" - Write-Host " meist ein falsches Passwort. Nochmal versuchen." - } else { - Write-Host " Der Dialog wurde ohne 'Enable' geschlossen." - Write-Host " Zuverlaessiger Weg ohne Dialog:" -ForegroundColor Cyan - Write-Host " powershell -ExecutionPolicy Bypass -File tools\autologon_einrichten.ps1 -Direkt" -ForegroundColor Cyan - } + Write-Host " Haeufigster Grund: falsches Passwort (Autologon meldet das" + Write-Host " nicht zurueck) oder Dialog nicht bestaetigt." + Write-Host " Erneut versuchen:" -ForegroundColor Cyan + Write-Host " powershell -ExecutionPolicy Bypass -File tools\autologon_einrichten.ps1 -Direkt" -ForegroundColor Cyan Write-Host "" Write-Host " Schritt 2 wird uebersprungen - eine Sperr-Aufgabe ohne" Write-Host " Auto-Logon waere nur laestig."