install.ps1 fragt bei fehlgeschlagener Verbindung selbst nach Zugangsdaten

Test-Path auf einem UNC-Pfad fragt nie nach einem Passwort - ohne eine
bereits bestehende SMB-Sitzung liefert es bei einem geschuetzten Share
einfach "false", ganz ohne Fehlermeldung. Das Skript verliess sich bisher
darauf, dass eine Sitzung schon von Hand aufgebaut wurde (Explorer oder
"net use"), und meldete sonst "Ziel nicht erreichbar" - selbst wenn Pfad
und Zugangsdaten korrekt waren. Jetzt fragt es bei fehlender Erreichbarkeit
selbst nach Benutzername/Kennwort und baut die Sitzung per "net use" auf,
bevor es endgueltig abbricht.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 10:27:51 +02:00
parent 2ea01ce2ce
commit e999d629c5
2 changed files with 56 additions and 1 deletions
+29 -1
View File
@@ -159,7 +159,35 @@ if (-not $Ziel) {
}
if (-not (Test-Path $Ziel)) {
throw "Ziel nicht erreichbar: $Ziel - Samba-Share verbunden? Pfad korrekt?"
# Test-Path fragt nie nach einer Anmeldung: ohne eine bereits bestehende
# SMB-Sitzung zu diesem Server liefert es bei einem passwortgeschützten
# Share einfach "false" - ganz ohne Fehlermeldung oder Passwortabfrage.
# Wer den Pfad vorher nicht schon per Explorer oder "net use" verbunden
# hatte, bekam deshalb einen irreführenden "nicht erreichbar"-Fehler, auch
# wenn Pfad und Zugangsdaten korrekt waren. Deshalb hier selbst nachfragen
# und die Sitzung aufbauen, statt das als manuellen Vorschritt vorauszusetzen.
if ($Ziel -match '^\\\\') {
Warnung "Kein Zugriff auf $Ziel - vermutlich fehlt die Anmeldung am Samba-Share."
Write-Host ""
$nutzer = Read-Host " Benutzername [homeassistant]"
if (-not $nutzer) { $nutzer = "homeassistant" }
$kennwortSicher = Read-Host " Kennwort" -AsSecureString
$kennwort = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($kennwortSicher))
# Eine tote Verbindung von einem vorherigen Versuch würde den
# Neuaufbau blockieren - leise entfernen, falls vorhanden.
& net use $Ziel /delete /y *> $null
& net use $Ziel /user:$nutzer $kennwort
$kennwort = $null
if ($LASTEXITCODE -ne 0 -or -not (Test-Path $Ziel)) {
throw "Ziel nicht erreichbar: $Ziel - Anmeldung fehlgeschlagen oder Pfad falsch."
}
Gut "Angemeldet."
} else {
throw "Ziel nicht erreichbar: $Ziel - Pfad korrekt?"
}
}
# Ein config-Verzeichnis ohne configuration.yaml ist mit hoher Wahrscheinlichkeit