Autologon: -Direkt-Weg ohne GUI-Dialog

Der GUI-Weg fuehrte zweimal zu nichts. Diagnostiziert: der Dialog OEFFNET sich
(Fenstertitel 'Autologon - Sysinternals', Prozess verifiziert), muss aber mit
ENABLE bestaetigt werden — nur schliessen tut nichts.

Neu: -Direkt. Autologon 3.10 nimmt Benutzer/Domaene/Passwort als Argumente;
das Skript fragt es per Read-Host -AsSecureString ab (unsichtbar, nicht in der
History) und ruft ohne Dialog auf. Schlaegt es fehl, nennt das Skript jetzt den
wahrscheinlichen Grund je nach Weg (Dialog nicht bestaetigt vs. falsches
Passwort).

Abwaegung dokumentiert: bei -Direkt steht das Passwort fuer den Moment des
Aufrufs in der Kommandozeile des Kindprozesses (fuer Admins kurz sichtbar). Es
landet nicht in einer Datei, nicht in der Shell-History — und anschliessend als
verschluesseltes LSA-Secret statt im Klartext in der Registry.

Mit dem echten 5.1-Parser geprueft (0 Fehler), -Direkt als Parameter erkannt,
BOM gesetzt, n-Falle-Scan sauber.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 06:45:54 +02:00
co-authored by Claude Opus 5
parent eccc13f2cf
commit 4c8ce18a9f
2 changed files with 60 additions and 8 deletions
+49 -8
View File
@@ -33,6 +33,21 @@
# ist `AutoAdminLogon = 1` die Bedingung, und erst danach wird ueberhaupt
# ueber die Speicherart geurteilt.
# AUFRUF-VARIANTEN:
# ... -File tools\autologon_einrichten.ps1 GUI-Dialog (Standard)
# ... -File tools\autologon_einrichten.ps1 -Direkt ohne Dialog, Passwort
# wird hier abgefragt
# ⚠ `-Direkt` ist der zuverlaessige Weg. Der Dialog OEFFNET sich zwar
# (Fenstertitel "Autologon - Sysinternals", verifiziert), muss aber mit ENABLE
# bestaetigt werden — wird er nur geschlossen, passiert nichts.
# ⚠ Abwaegung bei `-Direkt`: Autologon 3.10 nimmt Benutzer/Domaene/Passwort als
# Argumente. Das Passwort steht damit fuer den Moment des Aufrufs in der
# Kommandozeile des Kindprozesses (fuer Administratoren kurz sichtbar). Es wird
# NICHT in eine Datei geschrieben, nicht in die PowerShell-History (Read-Host)
# und landet anschliessend als verschluesseltes LSA-Secret — nicht im Klartext
# in der Registry.
param([switch]$Direkt)
$ErrorActionPreference = 'Stop'
$hier = Split-Path -Parent $MyInvocation.MyCommand.Path
$k = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
@@ -57,12 +72,32 @@ Write-Host " SCHRITT 1 - Auto-Logon aktivieren (verschluesseltes LSA-Secret)"
Write-Host "=================================================================="
Write-Host " Benutzer: $env:USERNAME Domaene: $env:COMPUTERNAME (lokal)"
Write-Host ""
Write-Host " Es oeffnet sich gleich der Autologon-Dialog." -ForegroundColor Cyan
Write-Host " --> Passwort eintragen und auf ENABLE klicken." -ForegroundColor Cyan
Write-Host " (Wird der Dialog nur geschlossen, passiert NICHTS - das Skript"
Write-Host " sagt es dann auch.)"
Write-Host ""
Start-Process -FilePath $exe -ArgumentList '/accepteula' -Wait
if ($Direkt) {
# ⚠ 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
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
try {
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
if (-not $pw) {
Write-Host " ABBRUCH: kein Passwort eingegeben." -ForegroundColor Red
exit 1
}
Write-Host " Aktiviere Auto-Logon ..."
$null = & $exe $env:USERNAME $env:COMPUTERNAME $pw /accepteula 2>&1
} finally {
# Klartext so kurz wie moeglich im Speicher halten
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
Remove-Variable pw -ErrorAction SilentlyContinue
}
} else {
Write-Host " Es oeffnet sich gleich der Autologon-Dialog." -ForegroundColor Cyan
Write-Host " --> Passwort eintragen und auf ENABLE klicken." -ForegroundColor Cyan
Write-Host " (Nur schliessen reicht NICHT - dann passiert nichts."
Write-Host " Zuverlaessiger: Skript mit -Direkt aufrufen.)"
Write-Host ""
Start-Process -FilePath $exe -ArgumentList '/accepteula' -Wait
}
# ── Ergebnis ehrlich pruefen ────────────────────────────────────────────
$an = (Get-ItemProperty -Path $k -Name AutoAdminLogon -EA SilentlyContinue).AutoAdminLogon
@@ -77,8 +112,14 @@ Write-Host " DefaultUserName : $(if ($user) { $user } else { '(nicht gesetzt)'
if (-not $aktiv) {
Write-Host ""
Write-Host " ==> AUTO-LOGON IST NICHT AKTIV." -ForegroundColor Yellow
Write-Host " Der Dialog wurde offenbar ohne 'Enable' geschlossen."
Write-Host " Skript einfach erneut aufrufen und auf Enable klicken."
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 ""
Write-Host " Schritt 2 wird uebersprungen - eine Sperr-Aufgabe ohne"
Write-Host " Auto-Logon waere nur laestig."