Konfigurationsdateien für Cmdlets (oder Objekte selbst gemacht)

Bei manchen Cmdlets wäre es ganz praktisch, wenn man nicht alle Details jedes Mal über Parameter festlegen müsste, sondern die Daten aus einer „Konfigurationsdatei“ einlesen könnte. Ein typisches Beispiel ist ein Send-Mail-Cmdlet, bei dem jedes Mal die Adresse des Mail-Servers, Benutzername zur Anmeldung usw. übergeben werden müssen. Angaben, die zum einen immer gleich sind, und die man sich erfahrungsgemäß nie so richtig merken kann. Die Registry scheidet als Ablage aus verschiedenen Gründen genauso aus wie die guten, alten Ini-Dateien (wenngleich es immer noch attraktiv ist wie einfach sich ihr Inhalt mit Notepad auch von weniger versierten Anwendern editieren lässt).

Die PowerShell ist bekanntlich eine objektorientierte Shell, also sollte die Lösung auch etwas mit Objekten zu tun haben. Was nicht jeder weiß, bei der PowerShell kann man sich eigene Objekte über eine kleine XML-Datei definieren. Die folgende XML-Datei definiert ein PSCustomObject mit vier Properties:

<Objs  xmlns=“http://schemas.microsoft.com/powershell/2004/04″>
<Obj>
<MS>
    <S N=“To“>pm@activetraining.de</S>
    <S N=“From“>bg@meikrosoft.kom</S>
    <S N=“MailServer“>smtp.publicmail.org</S>
    <I32 N=“Port“>25</I32>
  </MS>
</Obj>
</Objs>

Drei Properties sind vom Typ String, eine Property vom Typ Int32. Dafür, dass aus diesem XML-Fragment, das sich in einer Textdatei befindet, ein Objekt wird sorgt das Import-ClixXml-Cmdlet, das bereits seit 1.0 dabei ist:

$MailConfig = Import-CliXml MailConfig.xml

Wie sich mit Get-Member schnell feststellen lässt ist ein „richtiges“ Objekt (Typ PSCustomObject) entstanden, dessen Properties z.B. den Parametern eines Send-Mail-Cmdlets zugewiesen werden könnten.

Das Pendant zu Import-CliXml ist Export-Clixml, mit dem sich ein beliebiges Objekts in XML serialisieren lässt. Das obige XML ist das Resultat einer solchen Serialisierung eines zuvor angelegten Objekts, wobei ich die offenbar nicht benötigten Fragmente weggelassen habe (die Namespace-Deklaration ist obligatorisch, wobei die 2004 für das „Entwicklungsjahr“ der PowerShell stehen dürfte;)

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s