install.ps1: Zugangsdaten direkt nach der Pfadeingabe abfragen
Bisher wurde nach dem manuell eingegebenen config-Pfad erst ein Erreichbarkeits-Test versucht (der ohne bestehende SMB-Sitzung fast immer scheitert) und erst danach nach Benutzername/Kennwort gefragt. Jetzt folgt die Abfrage direkt auf die Pfadeingabe. Die Anmeldelogik selbst ist dafür in die Funktion SambaAnmelden ausgelagert, die weiterhin auch als Rückfallebene für automatisch gefundene oder per -Ziel übergebene Pfade dient. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -82,6 +82,29 @@ function Gut($text) { Write-Host " [ok] $text" -ForegroundColor Green }
|
||||
function Info($text) { Write-Host " [info] $text" -ForegroundColor DarkGray }
|
||||
function Warnung($text) { Write-Host " [!] $text" -ForegroundColor Yellow }
|
||||
|
||||
# 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. Diese
|
||||
# Funktion baut die Sitzung selbst auf, statt das als manuellen Vorschritt
|
||||
# vorauszusetzen.
|
||||
function SambaAnmelden($pfad) {
|
||||
$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. "Nichts zu löschen" ist
|
||||
# dabei der Normalfall, meldet sich aber als Fehler - mit
|
||||
# $ErrorActionPreference "Stop" würde das sonst das ganze Skript
|
||||
# abbrechen, deshalb hier abgefangen statt nur umgeleitet.
|
||||
try { & net use $pfad /delete /y *> $null } catch { }
|
||||
|
||||
& net use $pfad /user:$nutzer $kennwort
|
||||
$kennwort = $null
|
||||
}
|
||||
|
||||
$restliste = New-Object System.Collections.ArrayList
|
||||
|
||||
Write-Host ""
|
||||
@@ -155,35 +178,25 @@ if (-not $Ziel) {
|
||||
Write-Host ""
|
||||
$Ziel = Read-Host " config-Pfad"
|
||||
if (-not $Ziel) { throw "Kein Ziel angegeben - Abbruch." }
|
||||
|
||||
# Direkt nach der Pfadeingabe fragen, nicht erst nach einem
|
||||
# (ohne bestehende Sitzung fast immer erfolglosen) Erreichbarkeits-
|
||||
# Test - siehe SambaAnmelden oben.
|
||||
if ($Ziel -match '^\\\\') {
|
||||
Write-Host ""
|
||||
SambaAnmelden $Ziel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Path $Ziel)) {
|
||||
# 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.
|
||||
# Automatisch gefundene oder per -Ziel übergebene Pfade durchlaufen
|
||||
# SambaAnmelden oben nicht - hier derselbe Weg als Rückfallebene, falls
|
||||
# auch für sie eine Anmeldung fehlt.
|
||||
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. "Nichts zu
|
||||
# löschen" ist dabei der Normalfall, meldet sich aber als Fehler -
|
||||
# mit $ErrorActionPreference "Stop" würde das sonst das ganze Skript
|
||||
# abbrechen, deshalb hier abgefangen statt nur umgeleitet.
|
||||
try { & net use $Ziel /delete /y *> $null } catch { }
|
||||
|
||||
& net use $Ziel /user:$nutzer $kennwort
|
||||
$kennwort = $null
|
||||
SambaAnmelden $Ziel
|
||||
if ($LASTEXITCODE -ne 0 -or -not (Test-Path $Ziel)) {
|
||||
throw "Ziel nicht erreichbar: $Ziel - Anmeldung fehlgeschlagen oder Pfad falsch."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user