Praxis-Workshop

Schneller Einstieg in die PowerShell - Skripte ausführen

Dieser Praxisbeitrag zeigt, wie Sie die Skripte der PowerShell schnell und problemlos einsetzen können. Lesen Sie welche Fallen und Probleme auf Einsteiger warten - und wie Sie diese vermeiden und umgehen können.

Administratoren und Systembetreuer wollen nicht programmieren -würden aber gern viele Aufgaben automatisieren. Dafür eignet sich die PowerShell perfekt.

"Normale" IT-Profis, die sich mit der Wartung und Betreuung von Systemen befassen (müssen), denken und arbeiten nicht auf die gleiche Art und Weise wie Programmierer. Dies wird besonders dann augenfällig, wenn sich Windows-Systembetreuer und -Administratoren immer häufiger mit der PowerShell als Verwaltungs- und Automatisierungswerkzeug auseinandersetzen müssen. Während IT-Profis aus dem Unix-/Linux-Umfeld freudig die weitere Aufwertung der Kommandozeile als ein zentrales Administrationswerkzeug begrüßen, sehen es viele Windows-Profis noch als wenig sinnvoll an, sich wieder mit dieser ihrer Ansicht nach archaischen Eingabemethode zu beschäftigen.

Doch die PowerShell bietet vielfältige Möglichkeiten, die weit über die Funktionen einer simplen Kommandozeile hinausgehen, wenn sie auch - wie alle Skript- und Programmiersprachen - ihre Eigenheiten hat. Wir tragen in einer Artikelserie einige Fallstricke beziehungsweise "Annoyances" zusammen, auf die viele PowerShell-Einsteiger bei ihren ersten Begegnungen mit Microsofts Skript-Sprache stoßen. Wir beginnen mit dem Ausführen von PowerShell-Skripten. Für alle Artikel gilt unser Rat: Probieren Sie die Beispiele selbst aus, verändern und testet Sie die hier vorgestellten Skripte und Kommandos auf ihren Systemen - das ist nach unserer Erfahrung immer noch der beste Weg, eine derartige Sprache in den Griff zu bekommen.

Wer auf der Suche nach Beispielen ist, sollte sich unseren Beitrag "Die besten PowerShell-Skripte in der Praxis" ansehen. Dort finden sich viele praxisnahe Beispiele. Darüber hinaus werden interessierte Anwender in der TechNet Gallery fündig.

Wer sich grundlegend mit dem Thema PowerShell vertraut machen will, findet in Microsofts Virtual Academy einige kostenlose Kurse:

PowerShell-Skripte ausführen dürfen

Wer mit Hilfe der PowerShell automatisieren will, wird dazu in der Regel seine selbstentworfenen oder aus anderen Quellen zur Verfügung stehenden Skripts auf seinem System auch "stand-alone" ausführen wollen. Dazu schreibt er die PowerShell-Cmdlets in eine Datei mit der Endung .ps1 und sollte dieses dann auf seinem System mit Hilfe der PowerShell ausführen können. Aber die Sicherheitsmechanismen der PowerShell verhindern dies zunächst einmal - eine solche Datei wird nicht ausgeführt. Geregelt wird dieses Verhalten durch vier unterschiedliche Ausführungsrichtlinien in der PowerShell:

Restricted: Standardmäßig auf den Windows-Systemen eingestellt, wenn der Nutzer keine Änderung vorgenommen hat. Es werden keine Skripte auf dem System ausgeführt und der Nutzer kann nur interaktiv mit der PowerShell arbeiten.

Allsigned: Nur Skripte, die eine digitale Signatur aufweisen, werden ausgeführt. Skripte, die von einem Herausgeber signiert wurden, der bisher noch unbekannt ist, erfordern eine Bestätigung des Anwenders, dass er diesem vertraut.

Remotesigned: Aus dem Netz heruntergeladene Skripte werden ausgeführt, wenn sie von einem vertrauenswürdigen Autor signiert wurden. Lokale Skripte, die nicht heruntergeladen wurden, führt die Shell ohne Nachfrage aus. Sind diese allerdings von einem bisher unbekannten Herausgeber signiert, so fragt die PowerShell nach.

Unrestricted: Digitale Signaturen werden von der PowerShell grundsätzlich ignoriert. Sie fragt aber beim Nutzer nach, wenn ein Skript ausgeführt werden soll, das aus dem Internet heruntergeladen wurde.

Wenn Sie wissen wollen, wie die Ausführungsrichtlinie auf seinem lokalen Windows-System gesetzt ist, sollte sie dazu das folgende Cmdlet direkt am Prompt der PowerShell aufrufen:

Get-ExecutionPolicy

Wer eine etwas umfangreichere Auflistung benötigt, die auch die jeweiligen Gültigkeitsbereiche zeigt, erhält diese durch Hinzufügen des Parameters "-List":

Get-ExecutionPolicy -List

Dieses Cmdlet zeigt dann auch an, für welchen Bereich ("Scope") diese Beschränkungen gelten. Dazu gehören beispielsweise die "MachinePolicy" und auch der "CurrentUser" und die "LocalMachine" - also die Bereiche, die sich auch in der Registry wiederfinden. Wollen Sie die Ausführungsrichtlinie ändern, so können Sie dazu das Cmdlet "Set-ExecutionPolicy" verwenden. Allerdings benötigen Sie dazu die Rechte eines Administrators (das gilt für alle Windows-Versionen ab Windows Vista), sollten die PowerShell also mittels "Als Administrator ausführen" starten. Der folgende Aufruf setzt die Ausführungsrichtlinie dann auf den Wert "Unrestricted":

Set-ExecutionPolicy Unrestricted

Das Cmdlet arbeitet auch interaktiv: Wird es ohne Angabe einer Ausführungsrichtlinie aufgerufen, so fragt es den Nutzer nach der einzustellenden Richtlinie. Vor der Änderung bekommt der Anwender eine Warnung angezeigt und muss noch einmal explizit bestätigen, dass er diese Änderung vornehmen will. Die Änderungen an der Ausführungsrichtlinie sind sofort wirksam, ein Neustart der PowerShell ist dazu nicht notwendig. Die Änderungen werden auf dem lokalen System in die Registry geschrieben und bleiben bis zu einer nächsten expliziten Änderung bestehen.

Es gibt aber noch einen anderen Weg, Skripte innerhalb der PowerShell auszuführen, wenn die Ausführungsrichtlinie auf "Restricted" gesetzt wurde: Starten Sie die PowerShell mit der Option "-executionpolicy bypass", dann können Sie ebenfalls Skripte ausführen. Das gelingt am einfachsten, indem Sie mittels "Windows-Taste + R" ein "Ausführen"-Fenster aufrufen und dort den folgenden Befehl eingeben:

PowerShell -executionpolicy bypass

Die PowerShell und das Ausführen der Skripte mit der ISE

Vielleicht nutzen Sie ja lieber die integrierte Entwicklungsumgebung ISE (Integrated Scripting Environment), um Ihre PowerShell-Programme zu erstellen und auszuführen? Innerhalb der ISE haben sie zunächst auch keine Probleme ihre eingetippten Skript-Befehle ablaufen zu lassen. Speichern Sie diese aber direkt als Datei ab und rufen diese wieder in der ISE auf, so greift auch hier die eingestellte Ausführungsrichtlinie und im Zweifelsfall lässt sich das Skript nicht ausführen. Leider funktioniert der zuvor gezeigte Tipp mit der ISE nicht. Ein Aufruf der Entwicklungsumgebung der Form:

PowerShell_ise - executionpolicy bypass

führt leider zu einer Fehlermeldung mit dem Hinweis, dass für den Namen "executionpolicy" keine Option verfügbar ist. Was ist hier zu tun? Einmal besteht die Möglichkeit, die Ausführungsrichtlinie für die entsprechende Workstation, den Server oder den Nutzer generell auf den gewünschten Wert wie beispielsweise "RemoteSigned" zu setzen - das gilt dann natürlich auch für die ISE. Wollen oder können Sie diesen Weg auf dem entsprechenden System nicht nutzen, so bleibt noch die - etwas umständlichere Möglichkeit - ein normales PowerShell-Fenster wie zuvor beschrieben mit "-executionpolicy bypass" aufzurufen und dort dann einfach den Entwicklungsumgebung mittels:

ise

aufzurufen. Dann arbeitet auch diese Software im "bypass"-Modus und kann Skripte von der Festplatte direkt ausführen. (mje)