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
+35 -11
View File
@@ -71,8 +71,10 @@ Write-Host "=================================================================="
Write-Host " SCHRITT 1 - Auto-Logon aktivieren (verschluesseltes LSA-Secret)" Write-Host " SCHRITT 1 - Auto-Logon aktivieren (verschluesseltes LSA-Secret)"
Write-Host "==================================================================" Write-Host "=================================================================="
Write-Host " Benutzer: $env:USERNAME Domaene: $env:COMPUTERNAME (lokal)" Write-Host " Benutzer: $env:USERNAME Domaene: $env:COMPUTERNAME (lokal)"
Write-Host "" # Aktivierung ohne Dialog — als Funktion, damit sie auch als Rueckfall nach
if ($Direkt) { # 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 # ⚠ Read-Host -AsSecureString: die Eingabe erscheint nicht auf dem Schirm
# und landet nicht in der PowerShell-History. # und landet nicht in der PowerShell-History.
$sec = Read-Host " Passwort fuer $env:USERNAME (Eingabe bleibt unsichtbar)" -AsSecureString $sec = Read-Host " Passwort fuer $env:USERNAME (Eingabe bleibt unsichtbar)" -AsSecureString
@@ -80,16 +82,22 @@ if ($Direkt) {
try { try {
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr) $pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
if (-not $pw) { if (-not $pw) {
Write-Host " ABBRUCH: kein Passwort eingegeben." -ForegroundColor Red Write-Host " Kein Passwort eingegeben." -ForegroundColor Red
exit 1 return $false
} }
Write-Host " Aktiviere Auto-Logon ..." Write-Host " Aktiviere Auto-Logon ..."
$null = & $exe $env:USERNAME $env:COMPUTERNAME $pw /accepteula 2>&1 $null = & $exe $env:USERNAME $env:COMPUTERNAME $pw /accepteula 2>&1
return $true
} finally { } finally {
# Klartext so kurz wie moeglich im Speicher halten # Klartext so kurz wie moeglich im Speicher halten
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
Remove-Variable pw -ErrorAction SilentlyContinue Remove-Variable pw -ErrorAction SilentlyContinue
} }
}
Write-Host ""
if ($Direkt) {
if (-not (Invoke-DirektAktivierung)) { exit 1 }
} else { } else {
Write-Host " Es oeffnet sich gleich der Autologon-Dialog." -ForegroundColor Cyan Write-Host " Es oeffnet sich gleich der Autologon-Dialog." -ForegroundColor Cyan
Write-Host " --> Passwort eintragen und auf ENABLE klicken." -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 " AutoAdminLogon : $(if ($an) { $an } else { '(nicht gesetzt)' })"
Write-Host " DefaultUserName : $(if ($user) { $user } 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) { if (-not $aktiv) {
Write-Host "" Write-Host ""
Write-Host " ==> AUTO-LOGON IST NICHT AKTIV." -ForegroundColor Yellow Write-Host " ==> AUTO-LOGON IST NICHT AKTIV." -ForegroundColor Yellow
if ($Direkt) { Write-Host " Haeufigster Grund: falsches Passwort (Autologon meldet das"
Write-Host " Autologon hat die Angaben nicht uebernommen —" Write-Host " nicht zurueck) oder Dialog nicht bestaetigt."
Write-Host " meist ein falsches Passwort. Nochmal versuchen." Write-Host " Erneut versuchen:" -ForegroundColor Cyan
} 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 " powershell -ExecutionPolicy Bypass -File tools\autologon_einrichten.ps1 -Direkt" -ForegroundColor Cyan
}
Write-Host "" Write-Host ""
Write-Host " Schritt 2 wird uebersprungen - eine Sperr-Aufgabe ohne" Write-Host " Schritt 2 wird uebersprungen - eine Sperr-Aufgabe ohne"
Write-Host " Auto-Logon waere nur laestig." Write-Host " Auto-Logon waere nur laestig."