Mittwoch, 9. September 2009

PowerShell Tips

In den letzten Monaten hatte ich viel mit der Powershell – speziell mit der Exchange Management Shell – zu tun. In diesem Post möchte ich ein paar der dabei gewonnen Erfahrungen wiedergeben:

Was ich immer wieder falsch mache, wenn ich eine Weile nicht mit der PS gearbeitet habe ist, dass ich die Formatierungsangabe NICHT an das Ende eines Commands setze:

get-mailbox |fl identity | ?{$_.alias –like ‘test*’}

Das funktioniert nicht wie erwartet. Stattdessen wird einfach “nichts” ausgegeben, auch kein Fehler. Richtig macht man das so:

 get-mailbox | ?{$_.alias –like ‘test*’} |fl identity

(ja, statt “where” kann man auch “?” schreiben).

Eine Übersicht über weitere Operatoren (“like”) findet sich hier:
http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/where-object.mspx

Wer kein Full-Time Entwickler ist und sich nicht täglich mit Objekten rumschlägt, kann sich mal anschauen, welche Möglichkeiten es gibt von der PS aus mit Objekten zu arbeiten:

$forest = [system.directoryservices.activedirectory.forest]::getcurrentforest()

Danach einfach mal $forest. eingeben und dann mit TAB durch die Properties und Methoden springen. Hier ist sicher einiges dabei, das man immer mal wieder brauchen kann.

Als Entwicklungsumgebung habe ich mir den PowerGUI Editor besorgt. Wer IntelliSense von VisualStudio kennt und sich in Powershell anschließend per Notepad(++) einen abgemüht hat, wird vom PowerGUI Editor begeistert sein. Die PowerGUI als solche ist ganz nett anzusehen. Damit kann man sich ein Script visuell zusammenklicken. Für mich bietet das aber keinen wirklichen Mehrwert. Aber der mitgelieferte Editor ist nicht mehr aus meinem Tools-Folder wegzudenken.

Funktionen werden in der Powershell anders aufgebaut als z.B. in C#. Das muss man wissen, denn es werden nicht zwangsläufig Fehler geworfen wenn man die Funktionen wie gewohnt aufbaut, aber deren Verhalten verändert sich :-)

function addiereAundB
{ param ([string]$A, [string]$B)
$Ergebnis=$A+$B
return $Ergebnis
}

CLI-XML

Export-cliXML und ImportcliXML sind sehr hilfreiche Werkzeuge:

Mit

get-mailbox testuser1 | export-clixml –path c:\testuser1.xml

exportiert man beispielsweise alle Settings einer Usermailbox in eine XML Datei. Die einzelnen Properties darin kann man anschließend wieder weiterverwenden:

$importXML = import-clixml c:\testuser1.xml

Anschließend kann man per $importXML.Alias z.B. den Alias aus dem exportierten XML auslesen.