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:
co-authored by
Claude Opus 5
parent
eccc13f2cf
commit
4c8ce18a9f
@@ -296,6 +296,17 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**`AutoAdminLogon = 1` die Bedingung**, und erst danach wird über die
|
||||
Speicherart geurteilt; ohne aktives Auto-Logon bricht das Skript mit Code 1 ab
|
||||
und überspringt Schritt 2.
|
||||
⚠⚠ **Der GUI-Weg führte zweimal zu nichts.** Diagnostiziert: der Dialog
|
||||
**öffnet sich** (Fenstertitel „Autologon - Sysinternals", Prozess verifiziert)
|
||||
— er muss aber mit **ENABLE** bestätigt werden; nur schließen tut nichts.
|
||||
Deshalb gibt es jetzt **`-Direkt`**: Autologon 3.10 nimmt Benutzer/Domäne/
|
||||
Passwort als Argumente, das Skript fragt es per `Read-Host -AsSecureString` ab
|
||||
(unsichtbar, nicht in der History) und ruft es ohne Dialog auf.
|
||||
**➜ `powershell -ExecutionPolicy Bypass -File toolsutologon_einrichten.ps1 -Direkt`**
|
||||
⚠ Abwägung: bei `-Direkt` steht das Passwort für den Moment des Aufrufs in der
|
||||
Kommandozeile des Kindprozesses (für Admins kurz sichtbar). Es landet **nicht**
|
||||
in einer Datei, nicht in der Shell-History — und anschließend als
|
||||
verschlüsseltes LSA-Secret, nicht im Klartext in der Registry.
|
||||
⚠ **Und ein Design-Fehler: die Sperre hätte bei JEDER Anmeldung gefeuert.** Ein
|
||||
`ONLOGON`-Trigger unterscheidet nicht. Deshalb prüft `tools/autologon_lock.ps1`
|
||||
jetzt die **Systemlaufzeit** — gesperrt wird nur, wenn der Rechner **< 3 min**
|
||||
|
||||
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user