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 Info($text) { Write-Host " [info] $text" -ForegroundColor DarkGray }
|
||||||
function Warnung($text) { Write-Host " [!] $text" -ForegroundColor Yellow }
|
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
|
$restliste = New-Object System.Collections.ArrayList
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
@@ -155,35 +178,25 @@ if (-not $Ziel) {
|
|||||||
Write-Host ""
|
Write-Host ""
|
||||||
$Ziel = Read-Host " config-Pfad"
|
$Ziel = Read-Host " config-Pfad"
|
||||||
if (-not $Ziel) { throw "Kein Ziel angegeben - Abbruch." }
|
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)) {
|
if (-not (Test-Path $Ziel)) {
|
||||||
# Test-Path fragt nie nach einer Anmeldung: ohne eine bereits bestehende
|
# Automatisch gefundene oder per -Ziel übergebene Pfade durchlaufen
|
||||||
# SMB-Sitzung zu diesem Server liefert es bei einem passwortgeschützten
|
# SambaAnmelden oben nicht - hier derselbe Weg als Rückfallebene, falls
|
||||||
# Share einfach "false" - ganz ohne Fehlermeldung oder Passwortabfrage.
|
# auch für sie eine Anmeldung fehlt.
|
||||||
# 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 '^\\\\') {
|
if ($Ziel -match '^\\\\') {
|
||||||
Warnung "Kein Zugriff auf $Ziel - vermutlich fehlt die Anmeldung am Samba-Share."
|
Warnung "Kein Zugriff auf $Ziel - vermutlich fehlt die Anmeldung am Samba-Share."
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
$nutzer = Read-Host " Benutzername [homeassistant]"
|
SambaAnmelden $Ziel
|
||||||
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
|
|
||||||
if ($LASTEXITCODE -ne 0 -or -not (Test-Path $Ziel)) {
|
if ($LASTEXITCODE -ne 0 -or -not (Test-Path $Ziel)) {
|
||||||
throw "Ziel nicht erreichbar: $Ziel - Anmeldung fehlgeschlagen oder Pfad falsch."
|
throw "Ziel nicht erreichbar: $Ziel - Anmeldung fehlgeschlagen oder Pfad falsch."
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user