From b35f27541facfbaca1c41f330ed4ce671eb954ff Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Fri, 7 Aug 2026 06:48:46 +0200 Subject: [PATCH] Autologon: Rueckfall auf den Direkt-Weg statt Sackgasse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Dialog-Weg ist zweimal ohne Ergebnis geblieben, weil er mit ENABLE bestaetigt werden muss. Statt den Nutzer ein drittes Mal tippen zu lassen, bietet das Skript nach einem abgebrochenen Dialog jetzt direkt an, es ohne Dialog zu erledigen (j/n) — die Aktivierung steckt dafuer in einer Funktion, die von beiden Wegen aufgerufen wird. Ausserdem ehrlicher in der Fehlerursache: ein falsches Passwort meldet Autologon nicht zurueck, das Ergebnis sieht dann genauso aus wie ein abgebrochener Dialog. Beides wird jetzt genannt statt nur eines. Mit dem echten 5.1-Parser geprueft, BOM gesetzt, Scan sauber. Co-Authored-By: Claude Opus 5 --- tools/autologon_einrichten.ps1 | 48 +++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 12 deletions(-) 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."