Archive for Juli, 2013

WPF Form aus Visual Studio als Formular mit der PowerShell nutzen

Hallo Community,

die Verwendung von Formularen als kleine Eingabemasken ist auch in Zeiten der PowerShell immer wieder ein Thema.
Heute möchte ich euch eine Methode beschreiben, mit der ihr eure Formulare in Visual Studio (http://msdn.microsoft.com/de-de/vstudio/) erstellt und mit eurem Skript ansprecht. Zuerst müsst ihr in Visual Studio ein neues Projekt vom Typ Windows / WPF Applikation erstellen. Dabei ist es unerheblich ob dies mit C# oder Visual Basic erstellt wird. Als nächstes entwerft ihr das Formular wie ihr es benötigt. Also Buttons, Label, Listen hinzufügen und, das ist ganz wichtig, jedem der Controls einen Namen geben. Speichert das Projekt ab und merkt euch den Pfad in dem die XAML Datei abgelegt wird.

Aber jetzt genug mit den Vorbereitungen und los geht es mit dem Skripten in der PowerShell. In dem Skript sind zuerst die Assemblies für das Presentation Framework und System als Typ hinzuzufügen. Dies geschieht mit den folgenden Zeilen:
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName
System

Danach wird der Inhalt er XAML Datei mittels Get-Content in eine [XML] typisierte Variable eingelesen.
[XML]$XAML = Get-Content D:\ps\WPF\PS_WPF_Sample.xaml

Der nächste Schritt ist ein kleiner Kunstgriff um das native Visual Studio Format in der PowerShell einbinden zu können. Es geht darum das Attribut x:class zu entfernen. Visual Studio benötigt diese Klasse aber die PowerShell kann auch wunderbar ohne dieses Attribut auskommen. Also weg damit…
$XAML.Window.RemoveAttribute(“x:Class”)

 Jetzt kann es mit nativer PowerShell und XML weiter gehen. Das Formular wird als Reader eingelesen und danach geladen.
$Reader = New-Object System.Xml.XmlNodeReader $XAML
$Form = [Windows.Markup.XamlReader]::Load($Reader)

Über die Variable $Form habt ihr jetzt den vollen Zugriff auf das WPF Formular. Jetzt gilt es die einzelnen Controls direkt ansprechen zu können.
Da die einzelnen Controls innerhalb von Visual Studio mit Namen versehen wurden können wir jetzt mit der PowerShell danach suchen und das Ergebnis in eine Variable pro Control packen.
$PSBtnOK = $Form.FindName(‘PSBtnOK’)

Jetzt gilt es den gefundenen Controls bzw. ihren Variablen die gleichen Tricks beizubringen wie Ihren Verwandten in Visual Studio d.h. es müssen Events zu den jeweiligen Variablen hinzugefügt werden. Welche dies sind hängt natürlich von dem jeweiligen Control ab und bei einem Button ist das natürlich der Click Event. Und so wird er in der PowerShell hinzugefügt:
$PSBtnOK.Add_Click($btnOKClick)

Als vorletzter Schritt muss der hinterlegte Skript-Block noch mit Leben gefüllt werden.  Das kann z.B. so aussehen:
$btnOKClick = {$PSLabel.Content = $PSText.Text}

Zu guter Letzt ist das Ganze noch in eine Funktion zu packen und diese muss als letztes aufgerufen werden. Die eigentliche Anzeige des Formulars erfolgt mit der Methode
$Form.ShowDialog() | Out-Null

Für den Aufruf kann entweder die ISE oder die PowerShell.exe mit dem Schalter -STA verwendet werden da WPF diese Option benötigt.

Anbei findet ihr in dem Artikel auch das beschriebe Skript sowie die XAML Datei. Die Pfade müsst ihr natürlich auf eure Gegebenheiten anpassen.

Viel Spaß mit dieser Art Formulare bereit zu stellen.
C:\PS> Get-Help -Name Rolf

WPF Sample 001

PS_WPF_Sample.ps1

PS_WPF_Sample.xaml

Outlook an Office 365 (WAVE 15) von Hand anbinden

Sollte es mal nötig sein, Outlook ohne einen autodiscover Eintrag im DNS mit Office365 (WAVE 15) anbinden zu müssen, so ist das möglich. Dabei ist die PowerShell sehr hilfreich, da man die ExchangeGUID des Postfaches benötig, das angebunden werden soll.

Als erstes stellt bitte eine Remote Powershell Verbindung zu dem entsprechenden Office 365 System her.

Jedes Benutzer Konto hat übrigens eine eigene ExchangeGUID, was man nach der Ausführung des folgenden Befehls sehr leicht feststellen kann.

Get-Recipient | select Identity, ExchangeGUID  | ft

In größeren Organisationen kann man die Abfrage auch auf einen Benutzer begrenzen.

Get-Recipient -Identity “test.user@deinefirma.de” | select ExchangeGUID | fl

Die ExchangeGUID zusammen mit dem Domainnamen bildet dann den Servernamen:

Beispiel:   fd957759-8091-4e9e-ab4c-eb5e7a242740@deinefirma.de

In der Anlage findet Ihr noch ein PDF in dem die Einbindung in Outlook beschrieben ist.

PDF: Outlook an Office 365

 

Umfrage zu künftigen Treffen

Nach den ersten beiden Treffen der PowerShell Anwendergruppe in 2013, sind wir bereits fleißig dabei, weitere Treffen zu organisieren. Sobald wir hier Termine gefunden haben, werden wir diese frühzeitig veröffentlichen. Die detaillieren Themen folgen dann jeweils kurz vor den Veranstaltungen.

Nachdem wir aber eine Community sind, wollen wir euch natürlich auch gerne aktiv beteiligen. Gibt es von eurer Seite Themenvorschläge oder habt ihr vielleicht ein Projekt mit PowerShell realisiert, dass ihr gerne vorstellen würdet? Gerne könnt ihr eure Vorschläge hier posten oder mit uns unter Info@powershell-ag.de in Kontakt treten.

Um künftig auch neue Gesichter in unserer Runde begrüßen zu können, haben wir uns gedacht, manche Meetings zu splitten. Das heißt, in einem Teil würden wir Grundlagen zur PowerShell behandeln, im anderen ganz gewohnt ein spezielles Thema oder eine CaseStudy. Was haltet ihr von diesem Vorschlag?