Archiv für den Monat: Februar 2016

Tipp: Module nach dem Zeitpunkt sortieren an dem das Modul hinzugefügt wurde

Ein Get-Module -ListAvailable listet bekanntlich sämtliche lokal verfügbaren Module auf. Die Ausgabe erfolgt unterteilt nach den einzelnen Modulverzeichnissen in alphabetischer Reihenfolge. Möchte man eine Ausgabe, die nach dem Zeitpunkt sortiert ist, an dem das Modulverzeichnis erstellt wurde, erledigt das der folgende Befehl

PowerShell-Skripte als Windows-Dienste ausführen mit Always Up von CoreTechnologies

Möchte man erreichen, dass ein PowerShell kontinuierlich ausführt und bereits mit dem Windows-Start startet, genügt es im einfachsten Fall, eine Verknüpfung auf Powershell.exe im Autostart-Ordner anzulegen, die Ps1-Datei über den File-Schalter festzulegen und in das Skript eine Endlosschleife einzubauen, die dafür sorgt, dass es nicht von alleine wieder seine Ausführung beendet. Oft ist diese Sparversion vollkommen ausreichend. Wer eine etwas robustere Variante bevorzugt, bei der sich auf Wunsch auch ein Systemkonto auswählen lässt, unter dem das Skript ausgeführt wird, macht aus dem PowerShell-Skript einen Systemdienst. Ob das Skript einen Port oder ein Verzeichnis überwacht und bei jeder Aktivität z.B. eine Meldung in das Ereignisprotokoll schreibt, spielt dabei keine Rolle.

Für die Umsetzung sind keinerlei Programmierkenntnisse erforderlich. Es gibt eine erstaunlich große Auswahl an Tools, die einem die Arbeit abnnehmen. Eines davon ist der PowerGUI Script Editor als Teil von PowerGUI, bei jedem jedes Skript wahlweise als Exe-Datei oder als Systemdienst gespeichert werden kann, der anschließend per New-Service-Cmdlet nur noch registriert werden muss.

Eine Alternative ist das (kommerzielle) Tool AlwaysUp von CoreTechnologies Consulting, einer kleinen Softwarefirma aus Oakland, einem „Vorort“ von San Francisco in den USA. Die Aufgabe des Tools ist es, die Ausführung einer beliebigen Anwendung als Dienst zu ermöglichen, der mit dem Erstellen auch registriert wird und anschließend startet. Das Tool kann aber auch einiges mehr. Unter anderem überwacht es die Ausführung des Dienstes und führt eine Aktion aus, wenn z.B. der Speicherbedarf einen zuvor festgelegten Wert überschreitet. Wer möchte, kann in diesem Fall auch ein (weiteres) Powershell-Skript starten. Sind Dialogfelder involviert, die ausgefüllt oder weggeklickt werden müssen, geht es mit AutoIt eventuell etwas einfacher. Wer ein PowerShell-Skript als Dienst ausführen möchte, führt (natürlich PowerShell.exe aus und legt den Pfad der Ps1-Datei über den File-Schalter fest. Damit das Ausführen von Profilskripten die Ausführung nicht verzögert, setze ich den NoProfile-Schalter voraus.

Insgesamt macht Always Up einen sehr guten Eindruck. Das Tool kostet knapp 50 US$ (Preisangabe ohne Gewähr). Auf der Webseite des Herstellers gibt es eine Version, die 30 Tage getestet werden kann:

http://www.coretechnologies.com/

Always Up führt jede Anwendung als Windows-Dienst auch, wenn es unbedingt sein muss, auch ein PowerShell-Skript

Always Up führt jede Anwendung als Windows-Dienst auch, wenn es unbedingt sein muss, auch ein PowerShell-Skript

Alles Gute für 2016

Ich wünsche allen Lesern dieses Blogs alles Gute für das Jahr 2016.

Diese Wünsche kommen Mitte Februar zwar etwas spät, wenngleich in einigen Regionen dieser Welt das neue Jahr erst mit dem Frühlingsanfang beginnt, doch hatte dies einen Grund. Ich hatte bereits inm alten Jahr mein Blog, das bei HostEurope gehostet wird, einen Provider, den ich mit gutem Gewissen empfehlen kann, von einem speziellen WordPress-Hosting auf ein allgemeines Web-Hosting umgestellt und bin seitdem einfach nicht dazu gekommen, die Inhalte, die ich zum Glück sehr einfach übernehnmen konnte, aufzubereiten und ein paar kleinere Änderungen vorzuhehmen.

In Zukunft gibt es unter dieser Adresse (www.poshadmin.de) wieder regelmäßig Tipps und Erläuterungen zu Themen, die etwas mit PowerShell, ActiveDirectory, Windows Server, Azure und Scripting zu tun haben.

Tipp: PowerShell-Skripte auch bei Restricted ausführen

Dass sich PowerShell-Skripte auch dann ausführen lassen, wenn die Ausführungsrichtlinie auf „Restricted“ gesetzt ist, ist kein Geheimnis. Es wird sogar offiziell als Teil der Hilfe, die beim Aufruf von Powershell.exe mit -? angezeigt, erwähnt (zumindestens ansatzweise). Im einfachsten Fall startet man Powershell.exe mit dem Schalter ExecutionPolicy und übergibt als Wert z.B. „Unrestricted“. Microsoft nennt die Ausführungsrichtlinie daher auch nicht einen Schutz vor der Ausführung von Skripten, sondern lediglich eine Maßnahme, die das Ausführen von Skripten etwas erschweren soll (ich bin immer aber nicht sicher, ob das von Anfang an so war oder ob man sich diese Erklärung erst später zurecht gelegt hat;).

Eine andere Variante besteht darin, einen Befehlstext in der Eingabeaufforderung per Pipe-Operator der Powershell.exe zu übergeben. Folgt auf den Command-Schalter lediglich ein Bindestrich, führt die PowerShell diesen Text aus. Damit lassen sich beliebige Befehle und auch Skripte unabhängig von der Einstellung der Ausführungsrichtlinie ausführen.

Ausgangspunkt is ein kleines Skript Test01.ps1, das eine Reihe von Befehlen enthält. Es wird durch den folgenden Aufruf in der Eingabeaufforderung ausgeführt:

Hinter dem Alias iex steckt das „berüchtigte“ Invoke-Expression-Cmdlet. Der Pfad von PowerShell.exe muss ausgeschrieben werden, da sich der Verzeichnispfad nicht in der Path-Umgebungsvariablen befindet.

Ein Tipp am Rande, der mir eher per Zufall aufgefallen ist: Möchte man die Ausführungsrichtlinie iediglich für den aktuellen Benutzer setzen, muss die PowerShell dazu nicht als Administrator gestartet werden:

Happy Scripting!