PowerShell-Scripts ausführen


    Tags:

    PowerShell ThumbnailMit PowerShell hat Microsoft der „guten alten“ cmd.exe einen mächtigen Nachfolger verschafft, und deren Anwendung und Beherrschung wird für Administratoren Pflicht: Für Microsoft-Server-Software wie Exchange oder SQL wird die Möglichkeit der Administration per PowerShell Standard, und wer Windows Server Core verwenden will, kommt trotz der Möglichkeit, einige grundlegende administrative Arbeiten auch mit grafischen Tools zu erledigen, ohne PowerShell-Kenntnisse nicht besonders weit.

    PowerShell bietet vollen Zugriff auf COM und WMI, um administrative Arbeiten am lokalen und an entfernten Rechnern zu ermöglichen. Bisherigen cmd.exe- und VBScript-Anwendern wird die Bedienphilosophie anfangs ein wenig fremd vorkommen. Folgende Tipps verhelfen zu einem raschen Einstieg.

    PowerShell 2.0 installieren

    Die aktuelle Version von PowerShell ist 2.0. Sie ist Bestandteil von Windows 7 und Windows Server 2008 R2. Für Windows XP SP3, Windows Vista SP1, Windows Server 2003 SP2 und Windows Server 2008 kann sie hier heruntergeladen werden, sowohl als 32-Bit- als auch als 64-Bit-Version.

    Microsoft bietet zu PowerShell 2.0 die komplette Referenz im TechNet an. Ein sehr guter Einstieg, um sich mit der Shell und ihren Prinzipien vertraut zu machen und etwas Beispiel-Code einzusehen, ist auch Microsofts PowerShell-Scriptcenter.

    PowerShell-Scripts zulassen

    Heruntergeladene Scripts stuft PowerShell anders ein als lokaleUnmittelbar nach dem Speichern seines ersten Scripts wird der neue PowerShell-Anwender feststellen, dass es sich nicht ausführen lässt. PowerShell ist per Voreinstellung sicher und führt nur direkt eingegebene Befehle, aber keine Scripts aus. Dies muss man erst ermöglichen, indem man innerhalb einer mit Administrator-Rechten aufgerufenen PowerShell die execution policy mittels des Befehls

    Set-ExecutionPolicy ‹policy›

    festlegt. Der Wert für ‹policy› ist per Voreinstellung Restricted, das heißt PowerShell führt Scripts nicht aus. Weitere mögliche Parameter, mit denen man die Ausführung zulassen kann, sind:

    AllSigned
    Führt alle Scripts mit einer digitalen Signatur aus. Wenn die signierende Stelle nicht bekannt ist, fragt PowerShell per Prompt, ob dem Herausgeber vertraut werden soll.
    RemoteSigned
    Erfordert eine digitale Signatur für aus dem Internet heruntergeladene Scripts, lokal erstellte Scripts werden immer ausgeführt.
    Unrestricted
    Führt alle Scripts aus; für nicht signierte, aus dem Internet heruntergeladene Scripts wird eine Warnung ausgegeben.

    Den gegenwärtigen Status erfährt man mit

    Get-ExecutionPolicy

    Um zu unterscheiden, welche Scripts aus dem Internet stammen, bedient sich PowerShell der NTFS-Streams, die dies auch für andere heruntergeladene ausführbare Dateien anzeigen. Man kann diesen Stream von einer Datei entfernen, indem man per Kontextmenü ihre Eigenschaften aufruft und auf der Registerkarte „Allgemein“ die Schaltfläche Zulassen betätigt.

    PowerShell mittels Gruppenrichtlinien zulassen

    Wenn man die Ausführungsrichtlinien nicht nur auf einzelnen, sondern auf einer größeren Zahl von PCs ändern möchte, dann empfiehlt sich der Einsatz von GPOs. Unter Computer- sowie Benutzerkonfiguration => Richtlinien => Administrative Vorlagen => Windows-Komponenten => Windows-PowerShell findet sich die Einstellung Scriptausführung aktivieren.

    Die Ausführungsrichtlinien für PowerShell lassen sich über GPOs festlegen.

    Sie bietet die drei weiter oben beschriebenen Ausführungsrichtlinien zur Auswahl, die man bei Set-ExecutionPolicy als Argument angibt. Im deutschen Windows sind die drei möglichen Werte lokalisiert und heißen "Nur signierte Scripts zulassen", "Lokale Scripts und remote signierte Scripts zulassen" sowie "Alle Scripts zulassen".

    PowerShell-Scripts ausführen

    Gegenüber dem Ausführen eines Scripts etwa in cmd.exe gibt es bei PowerShell noch zwei weitere wichtige Unterschiede:

    1. Powershell führt nur Scripts aus, die sich in der Umgebungsvariablen PATH befinden. Im aktuellen Verzeichnis befindliche Scripts fallen nicht darunter und müssen gegebenenfalls in der Form .\script.ps1 aufgerufen werden.
    2. Leerzeichen in Datei- und Verzeichnisnamen können nicht einfach in Anführungszeichen eingeschlossen werden, PowerShell interpretiert dies dann als String und gibt den Script-Aufruf einfach als Ausgabe zurück.Script-Namen, die Leerzeichen enthalten, müssen dem Operator „&“ zur Ausführung übergeben werden Vor wegen Leerzeichen in Anführungszeichen eingeschlossene Datei- und Verzeichnisnamen muss deshalb stets der Ausführungsoperator &, damit PowerShell weiß, dass der nun folgende String ausgeführt werden soll. Die Shell hilft hier allerdings mit und setzt bei der Tab-Vervollständigung von Datei- und Verzeichnisnamen bei Bedarf sowohl die Anführungszeichen als auch das &.

    Keine Kommentare