osdgap
Goto Top

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:
        $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

Content-ID: 63998577801

Url: https://administrator.de/contentid/63998577801

Ausgedruckt am: 17.11.2024 um 15:11 Uhr

7907292512
Lösung 7907292512 25.10.2023 aktualisiert um 09:06:30 Uhr
Goto Top
$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) 
}
Sid.
osdgap
Lösung osdgap 25.10.2023 um 09:20:50 Uhr
Goto Top
Cool, statt Hochkomma, geht es mit den Doppel-Hochkomma :D, vielen Dank

So macht er genau was ich möchte:
  $path = "\\mydomain.de\Share_DATA\VT\VT_A\App_Config\**$HostName**\App_Settings.xml"         
        $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)
7907292512
7907292512 25.10.2023 aktualisiert um 09:53:48 Uhr
Goto Top
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.
osdgap
osdgap 25.10.2023 aktualisiert um 09:56:51 Uhr
Goto Top
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."
7907292512
7907292512 25.10.2023 aktualisiert um 11:42:55 Uhr
Goto Top
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."

Ä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