Das Microsoft PowerShell-Team kommt nach Deutschland (und viele andere PowerShell-Experten auch)

Wer einmal den Erfinder der PowerShell, Jeffrey Snover, persönlich kennenlernen möchte, hat dazu Anfang Mai in Hannover die Gelegenheit. Zusammen mit vielen anderen „PowerShell-Promis“ kommt der Vater der PowerShell zur PowerShell Conf Europe, die vom 3. bis 5. Mai in Hannover stattfindet.

Auf der Konferenz werden 3 Tage PowerShell-Know how von den bekanntesten Experten der weltweiten PowerShell-Community geboten. Mehr Know-how an einem Ort geht fast nicht mehr.

Weitere Infos zur Teilnahme gibt es unter psconf.eu.

PowerShell-Tipp: Dateien umbenennen

Eigentlich ist das Umbenennen von Dateien per PowerShell keiner besonderen Erwähnung wert, eigentlich aber doch. Vor kurzem musste ich im Rahmen der Überarbeitung meines Windows 10-Buches auf das Creators Update (eine Menge Arbeit, aber das nur nebenbei, vor allem, wenn man zu spät anfängt;) eine Ordner mit Dateien umbenennen. Ich war gerade dabei den Ordner mit F2-Taste drücken, neuen Namen eintragen, Enter-Taste drücken, F2-Taste drücken, neuen Namen eintragen usw. durchzugehen bis mir einfiel, dass es dafür doch die PowerShell gibt. Leider ist das Rename-Item-Cmdlet etwas seltsam, ich kann mir nie merken, ob man für den NewName-Parameter nur den Namen übergibt oder den gesamten Pfad, so dass es gerade für einen PowerShell-Neuling eine große Hürde darstellt.

Der folgende Befehl nennt alle Dateien im aktuellen Verzeichnis um, in dem er ein „PM_“ zu Beginn des Dateinamens entfernt:

Soll nicht nur der Name, sondern gleich der Pfad der Datei geändert werden, nimmt man dafür das Move-Item-Cmdlet.

Endlich – PoshGUI.com, ein GUI-Designer für PowerShell-Skripte im Browser

Darauf habe ich lange gewartet, auf eine simple Möglichkeit einfache GUIs für ein PowerShell-Skript zusammenklicken zu können, ohne ein Tool installieren zu müssen mit Registrierung, Aktivierung (und dem Bezahlen ganz zu schweigen;). Es muss nicht immer alles kostenlos sein, aber ich muss auch keine Schrankwand kaufen, wenn ich ein paar Gegenstände in einem Karton unterbringen möchte.

Mit POSHGui wird eine Fensteroberfläche im Browser zusammengeklickt. Anschließend kann der generierte Code in ein Skript eingefügt werden. Dann müssen nur noch die Befehle in die dafür vorgesehenen Scriptblöcke eingetragen werden. Einfach und effektiv.

Die Adresse ist http://poshgui.com

Mit PoshGUi stellt man sich ein Fenster im Browser zusammen

Die aktuellste PackageManagement Preview – März 2016

Dieser Eintrag ist eher eine „Note to myself“ – in Schulungen suche ich oft eine Weile nach dem aktuellsten Link für die PackageManagement-Preview für die PowerSHell 4.0, so dass PowerShellGet und Install-Module zur Verfügung stehen. Wie ea aussieht, datiert die aktuellste Version vom März letzten Jahres:

https://www.microsoft.com/en-us/download/details.aspx?id=51451

Auf der einen Seite ist es etwas seltsam, dass das PowerShell-Team eine so simple Angelegenheit wie das PackageManagement-Projekt nicht endlich offiziell freigeben kann. Der „wahre“ Grund könnte sein, dass man die Anwnender dazu bringen will stattdessen WMF 5.1 zu installieren, was auch unter Windows 7 und Windows Server 2008 R2 problemlos möglich ist.

Tipp: Datei- und Verzeichnisberechtigungen hinzufügen – es wird etwas einfacher bei 5.0/5.1

Dass Hinzufügen einer Datei- oder Verzeichnisberechtigungen war mit den Hausmitteln der PowerShell alleine in der Vergangenheit etwas unnötig „kompliziert“ – mit der Version 5.0 wird es dank der statischen New-Methode etwas einfacher da kürzer:

Im Folgenden soll eine FullControl-Berechtigung für den User winbu für das Verzeichnis C:\Temp hinzugefügt werden:

Lässt man die Variable $r weg, fällt auch ein Befehl weg:

Soll eine Berechtigung für alle angemeldeten Benutzer gelten, muss bei einem deutschsprachigen Windows „Jeder“ und nicht „Everyone“ angegeben werden.

Dank Tab-Vervollständigung ist das Ganze relativ schnell eingegeben.

Tipp: Skripte der ganzen Welt zur Verfügung stellen per Gists und dem GistProvider von Doug Finke

Wer anderen seinen Skripte zur Verfügung stellen möchte oder selber nach einer einfachen Technik sucht, um seine Skripte jederzeit vor Ort beim Kunden, in einer Schulung oder im Urlaub abrufen zu können, hatte in der Vergangenheit viele Alternativen, keine war wirklich optimal. Ein Ftp-Verzeichnis ist naheliegend, einfach und robust, aber die Dateien können dort nicht direkt editiert werden und vieles mehr. Ein Ort, an dem ein maximaler Komfort für das Bereitstellen von Dateien geboten wird, ist natürlich GitHub. Nur wie greift man auf dort abgelegte Dateien zu? Vermutlich über eine Web-API. Sehr viel einfacher geht es mit Gists, durch das sich die Dateien eines GitHub-Repos direkt ansprechen lassen und dem GistProvider von Doug Finke.

Vorausesetzung ist die PowerShell ab Version 5.0 oder das installierte PackageManagement Preview vom März 2015 (!) für die Versionen 3.0 und 4.0.

Schritt 1: GistProvider installieren

Schritt 2: Erneutes Importieren

Aufgrund einer unterschiedlichen Benennung kann ein erneuter Import erforderlich sein:

Jetzt lassen sich Gists durchsuchen:

Wer doch lieber ein Ftp-Verzeichnis bevorzugt, kann Dateien sehr einfach per Wget (dahinter steckt das Invoke-WebRequest-Cmdlet) herunterladen:

Dieser Befehl ist nur ein Anschauungsbeispiel, da ich die Zugangsdaten zu meinem Ftp-Server nicht verraten habe;)

Zweites Treffen der PowerShell User Group Stuttgart am 23.02.17

Am 23.02.17 fand das zweite Treffen der PowerShell User Group Stuttgart statt. Der Gastgeber war dieses Mal die Firma Reddoxx (aka Die Netzwerker) in Kirchheim unter Tek (es ist interesssant, dass es von Esslingen aus mit 32km fast genauso weit nach Kirchheim Tek ist wie nach Stuttgart Vaihingen, nur die Fahrzeit kann „ein wenig“ varriieren, wenn auf der A8 Richtung München mal wieder Stau ist).

Es war wieder ein netter und abwechslungsreicher Abend angefüllt mit vielen kleinen und größeren Details rund um die PowerShell. Das Motto des Abends war „Script Review“ oder „Bring your own Script“ (BYOS). Die Idee war, dass jeder seine PowerShell-Skripte hätte mitbringen können, die dann unter fachkundiger Begutachtung aller Anwesenden auf Schwachstellen und mögliche Verbesserungen hätten abgeklopft werden sollen.

Das Fazit des Abends war, dass jeder der Annwesenden wieder einiges über die PowerShell dazu gelernt hat, mich eingeschlossen. So muss ich zugeben, dass ich bislang nicht wusste, dass sich auch Functions „dot sourced“ aufrufen lassen. In diesem Fall werden die lokalen Variablen der Functions in die Ebene des Aufrufers übernommen und stehen dort nach Beendigung der Function noch zur Verfügung. Mit anderen Worten, die lokalen Variablen einer Function werden durch den dotsoured-Aufruf zu Skriptvariablen. Mir fällt zwar nach wie vor kein Anwendungsfall dafür ein, interessant ist diese Technik aber in jedem Fall.

Der Termin für das dritte Treffen steht bereits fest: Am 15. März 2017, dieses Mal wieder in den Räumen von Microsoft in Stuttgart Vaihingen. Alle Infos gibt es hier:

https://www.meetup.com/de-DE/German-PowerShell-Usergroup/events/237720913/

Eine Anmeldung über Meetup ist erforderlich. Das setzt eine Registrierung bei Meetup voraus, ist aber in 2-3 Minuten erledigt.

Beim Script-Review herrschte absolute Hochspannung

Script-Review in Action

Ein weiteres Stimmungsbild vom zweiten Treffen der PowwerShell User Group Stuttgart in Kircheim Tek

Famous „Einzeiler“ in PowerShell

Es muss nicht immer gleich ein Skript sein, auch mit einem Einzeiler lässt sich bereits einiges bewerkstelligen. Auf Stackoverflow.com hat vor einigen Zeit eine Frage eine Vielzahl interessanter Einzeiler hervorgebracht:

http://stackoverflow.com/questions/615287/useful-powershell-one-liners?rq=1

Vergleichbar mit den „famous quotes“ gibt es natürlich auch ein paar „famous onliner“ in PowerShell. Hier ein paar Kostproben.

1) Auflisten aller Dateien, die ich heute geändert habe

2) Bei Visual Studio-Menüs die Großschreibung deaktivieren (11.0 steht für VS 2012)

3) Dateien auf den Desktop kopieren

Originell sind Beiträge wie „exit“ oder „gps programThatIsAnnoyingMe | kill“.

Ich habe natürlich selber auch jede Menge Einzeiler, die ich an dieser Stelle in naher Zukunft zusammenstellen werde (alleine in jeder Schulung fallen ein paar dieser Einzeiler an, die dann wieder in Vergessenheit geraten).

Tipp: Die Registry gekonnt durchsuchen

Der Umstand, dass die Registry-Hives wie HKey_Local_Machine als Laufwerk angesprochen werden, ist nur auf den ersten Blick eine Vereinfachung. Das wird spätestens dann deutlich, wenn man die Registry nach Einträgen (Names) eines Schlüssels und deren Werten (Values) durchsuchen möchte. Zwar zeigt ein dir hklm:\Software\Microsoft\Windows\CurrentVersion\Uninstall auch die Einträge der Schlüssel und ihre Werte an, liefert diese aber nicht zurück.

Der folgende Befehl funktioniert daher nicht.

Es gibt bei den zurückgegebenen Objekten ganz einfach keine Eigenschaft DisplayName. Bevor man jetzt allzu viel Zeit mit einer Suche nach einer Lösung verlierrt, was es gibt sind Methoden-Members wie GetValueNames und GetValue.

Der folgende Befehl gibt für alle installierten Anwendungen Anzeigename und Versionsnummer aus.

Weiß man nicht, welcher Schlüssel einen bestimmten Eintrag (Name) besitzen könnte, kommt die Methode GetValueNames in Frage.

Der folgende Befehl gibt alle Schlüssel aus, in denen eines Eintrag „ExecutionPolicy<" gibt.

Es stellt sich heraus, dass die Einstellung für die Ausführungsrichtlinie für den gesamten Computer unter HKEY_LOCAL_MACHINE\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell aufgehängt ist.

Der folgende Aufruf von Powershell.exe ändert die Einstellung z.B. auf „Restricted“.