colinardo
Goto Top

Powershell: Werte aus einer XML-Datei auslesen und wieder darin speichern

Oft steht man in einem Script vor der Aufgabe, Werte einer Variablen dauerhaft im Dateisystem zu hinterlegen um sie dann beim erneuten Ausführen des Scripts abrufen zu können. Diese Anleitung beschreibt eine mögliche Variante bei der die Werte in einer XML-Datei gespeichert werden.

back-to-topVorlage für die XML-Einstellungsdatei
Für die XML-Datei erstellen wir uns eine Vorlage die folgendermaßen aussehen sollte:
<?xml version="1.0" encoding="utf-8"?> 
<settings>
  <setting name="Einstellung 1">Wert 1</setting> 
  <setting name="Einstellung 2">Wert 2</setting> 
  <setting name="Einstellung 3">Wert 3</setting> 
</settings>
back-to-topFunktion zum Einlesen der Einstellungen in eine Hashtable
Die Funktion übernimmt die Aufgabe des Auslesens der einzelnen Einstellungen.
Als Parameter wird Ihr der Pfad zur XML-Datei übergeben.
Als Rückgabewert gibt es eine Hashtable zurück.
function readSettings([string]$xmlFile){
    $xmlDoc = New-Object XML
    $xmlDoc.Load($xmlFile)
    $settings = @{}
    $xmlDoc.settings.ChildNodes | %{$settings[$_.name] = $_.firstChild.Value}
    return $settings
}
back-to-topFunktion zum Speichern der geänderten Einstellungen
Diese Funktion übernimmt die Aufgabe des Speichern's der geänderten Einstellungen
Als Parameter erwartet es die Hashtable mit den geänderten Werten und den Pfad zur XML-Datei.
function writeSettings([hashtable]$ht,[string]$xmlFile){
    $xmlDoc = New-Object XML
    $xmlDoc.Load($xmlFile)
    foreach ($key in $ht.keys){
        $settingNode = $xmlDoc.SelectSingleNode("/settings/setting[@name='$key']")  
        if ($settingNode){
            $settingNode.firstChild.Value = $ht[$key]
        }else{
            $newNode = $xmlDoc.settings.setting.Clone()
            $newNode.name = $key
            $newNode.firstChild.Value = $ht[$key]
            $xmlDoc.settings.appendChild($newNode)
        }
    }
    $xmlDoc.Save($xmlFile)
}

back-to-topBeispiele zur Nutzung der Funktionen
back-to-topWert einer Einstellung auslesen
$mySettings = readSettings "C:\settings.xml"  
$wert1 = $mySettings["Einstellung 1"]  
back-to-topEinstellung in der Hashtable verändern
$mySettings["Einstellung 1"] = "Anderer Wert"  
back-to-topGeänderte Einstellungen in der XML-Datei abspeichern
writeSettings $mySettings "C:\settings.xml"  

Hoffe das hilft dem ein oder anderen bei seinem Powershell-Projekt face-smile

Grüße @colinardo
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate

Content-Key: 208115

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

Ausgedruckt am: 19.03.2024 um 08:03 Uhr