Gewisse Einstellungen möchte man nicht immer beim Start eines Skripte eingeben müssen, aber auch nicht direkt in dem Powershell Skript speichern. Ich habe bis dato hierfür INI-Files verwendet, um zentral Settings auszulesen oder die Einstellungen in der Registry gespeichert. Für mein aktuelles Projekt möchte ich es auf XML umstellen.

Aufbau der XML Datei

powershell-xml-settings-02
Quelle: https://practical365.com/using-xml-settings-file-powershell-scripts/

Der Aufruf einer XML-Einstellung erfolgt über den Path => $file.Settings.EmailSettings.SMTPServer (dieser Pfad ist nicht case sensitive)

Auslesen der XML Datei

Das Auslesen einer solchen XML-Datei ist ganz einfach:

[xml]$ConfigFile = Get-Content "$MySettings.xml"
$SMTPServer = $ConfigFile.Settings.EmailSettings.SMTPServer

Bekommt man die Fehlermeldung „“‚XML‘ is an invalid name for processing instructions“ ist die erstellte XML-Datei fehlerhaft.

An dieser Stelle möchte ich noch hinweisen, wie man Arrays in XML ablegt.

<settings>
    <services>
       <sv>service1</sv>
       <sv>service2</sv>
    </services>
</settings>

Einzelne Elemente kann man mittels $Configfile.settings.services.sv[0] … [n] ansprechen, wenn man aber nicht die Anzahl der Elemente kennt und diese in einem Array benötigt, kann man das mit einer foreach Schleife machen.

foreach ($service in $ConfiFile.settings.services.sv)
{
    Write-host $service
}

Links: