Autologon: Rueckfall auf den Direkt-Weg statt Sackgasse

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 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 06:48:46 +02:00
co-authored by Claude Opus 5
parent 4c8ce18a9f
commit b35f27541f
+36 -12
View File
@@ -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."