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](https://erhard-rainer.com/wp-content/uploads/2022/01/powershell-xml-settings-02.jpg)
Der Aufruf einer XML-Einstellung erfolgt über den Path => $file.Settings.EmailSettings.SMTPServer (dieser Pfad ist nicht case sensitive)
![](https://erhard-rainer.com/wp-content/uploads/2022/01/image.png)
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.
![](https://erhard-rainer.com/wp-content/uploads/2022/01/image-1.png)
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 }