Ordner auf Share zusammenstellen für jeden Client
Hallo zusammen,
für eine Anwendung soll ein Datenverzeichnis angelegt werden, darin sollte eine XML-Konfig individuell angepasst werden, zunächst sollte da lokal sein und das ging wunderbar.
Jetzt hat man beschlossen das das Ganze auf einem Share passieren soll, und hier gibt es ein Problem das ich den Pfad das ich mit der Variable des Hostnamen bilde nicht übergeben kann, hier die Code-Beispiele:
Ordner erstellen:
Code für lokal:
Code für den Share:
Zur Info, die Variablen werden einmal am Anfang des Skripts gebildet, ich habe das jeweils mit aufgeführt um zu zeigen das Variable da sind.
Wie bekomme ich den Pfad mit dem jeweiligen gebildeten Ordernamen an die Variable "$Path" korrekt übergeben?
Danke im Voraus
für eine Anwendung soll ein Datenverzeichnis angelegt werden, darin sollte eine XML-Konfig individuell angepasst werden, zunächst sollte da lokal sein und das ging wunderbar.
Jetzt hat man beschlossen das das Ganze auf einem Share passieren soll, und hier gibt es ein Problem das ich den Pfad das ich mit der Variable des Hostnamen bilde nicht übergeben kann, hier die Code-Beispiele:
Ordner erstellen:
$path = 'C:\App_Data\App_Settings.xml'
$Hostname = $env:Computername
New-Item -Path \\mydomain.de\Share_DATA\VT\VT_A\App_Config\**$HostName**\ -ItemType Directory
Code für lokal:
$path = 'C:\App_Data\App_Settings.xml'
$Hostname = $env:Computername
$FQDN = "$Hostname.mydomain.de"
$xml = New-Object XML
$xml.Load($path)
$xml.App_Settings.Instances.Instance.Name = $Hostname
$Node = $xml.App_Settings.Instances.Instance.HttpServer.Endpoints.Endpoint.Certificate
$Node.Subject = $FQDN
$xml.Save($path)
Code für den Share:
$path = \\mydomain.de\Share_DATA\VT\VT_A\App_Config\**$HostName**\App_Settings.xml
#
# mit und ohne "Hochkomma" kommt Fehler ! Problem ist die Angabe der Variablen im Pfad
#
$Hostname = $env:Computername
$FQDN = "$Hostname.mydomain.de"
$xml = New-Object XML
$xml.Load($path)
$xml.PersoDruSettings.Instances.Instance.Name = $Hostname
$Node = $xml.App_Settings.Instances.Instance.HttpServer.Endpoints.Endpoint.Certificate
$Node.Subject = $FQDN
$xml.Save($path)
Zur Info, die Variablen werden einmal am Anfang des Skripts gebildet, ich habe das jeweils mit aufgeführt um zu zeigen das Variable da sind.
Wie bekomme ich den Pfad mit dem jeweiligen gebildeten Ordernamen an die Variable "$Path" korrekt übergeben?
Danke im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63998577801
Url: https://administrator.de/contentid/63998577801
Ausgedruckt am: 17.11.2024 um 15:11 Uhr
5 Kommentare
Neuester Kommentar
$Hostname = $env:Computername
$FQDN = "$Hostname.mydomain.de"
$path = "\\mydomain.de\Share_DATA\VT\VT_A\App_Config\$Hostname\App_Settings.xml"
if (Test-Path $path){
$xml = New-Object XML
$xml.Load($path)
$xml.PersoDruSettings.Instances.Instance.Name = $Hostname
$Node =
$xml.App_Settings.Instances.Instance.HttpServer.Endpoints.Endpoint.Certificate
$Node.Subject = $FQDN
$xml.Save($path)
}
So macht er genau was ich möchte
Falsch! Die $path Zeile muss nach der Deklaration der Hostname Variablen stehen denn sonst ist die Variable ja leer! Sieh dir meinen Code bitte genau an. Das es bei dir funktioniert hat, hat dir nur die ISE suggeriert, aber die merkt sich Variablen und deswegen meinst du nur es läuft. Starte das Skript in einer neuen Konsole und die wirst sehen dss ich Recht habe.Und die Sternchen haben da auch nichts zu suchen.
Zitat von @osdgap:
Die Sternchen sind nur da damit es eigentlich in -Bold geschrieben werden sollte.
Die $Path-Zeile wird tatsächlich am Anfang gebildet, das habe ich unter dem ersten Code auch als Info/Hinweis dazu geschrieben. Es ist jeweils in den anderen Code-feldern zur Veranschaulischung mit dabei
"Zur Info, die Variablen werden einmal am Anfang des Skripts gebildet, ich habe das jeweils mit aufgeführt um zu zeigen das Variable da sind."
Die Sternchen sind nur da damit es eigentlich in -Bold geschrieben werden sollte.
Die $Path-Zeile wird tatsächlich am Anfang gebildet, das habe ich unter dem ersten Code auch als Info/Hinweis dazu geschrieben. Es ist jeweils in den anderen Code-feldern zur Veranschaulischung mit dabei
"Zur Info, die Variablen werden einmal am Anfang des Skripts gebildet, ich habe das jeweils mit aufgeführt um zu zeigen das Variable da sind."
Ändert aber rein garnichts daran das sie bei dir trotzdem in der falschen Reihenfolge angeordnet sind ...
Skripte werden der Reihe nach abgearbeitet und die Variablen in Strings innerhalb von doppelten Anführungszeichen dabei expandiert!
Ergo kann man eine Variable auch erst dann nutzen wenn sie bereits deklariert ist. Und das ist sie eben erst nach der Zeile mit der Deklaration des Hostnames
# variable leeren für den Fall das du in der ISE arbeitest
$hostname = ""
# hier ist $hostname noch leer
Write-Host "Computer-Name: $hostname"
$hostname = $env:Computername
# hier ist sie mit dem Computernamen gefüllt
Write-Host "Computer-Name: $hostname"
Jetzt kapiche?
Powershell Leitfaden für Anfänger