PowerShell-Scripte zur Automatisierung nutzen

Inhaltsverzeichnis

Post Featured Image

Bereits im ersten Teil der Beitrag-Reihe „Windows PowerShell verstehen“ sind wir auf die Möglichkeiten von Scripten eingegangen.

Scripte ermöglichen in der PowerShell das Automatisieren von Aufgaben. Dabei lassen sich nicht nur Systeme von Microsoft automatisieren, wie zum Beispiel Windows Server, Windows-Arbeitstationen, Exchange, SQL oder SharePoint. Auch viele Drittanbieter setzen auf die PowerShell und ermöglichen die Verwaltung ihrer Serverdienste.

Tools wie ScriptRunner erweitern die gegebenen Möglichkeiten noch weiter: Mit dem ScriptRunner Web Service Connector können Sie beispielsweise Systeme von Drittanbietern über deren REST-APIs einfach automatisieren.

Aber bevor wir in die PowerShell-Automatisierung eintauchen, brauchen wir eines: PowerShell-Skripte. Im Folgenden gehen wir ausführlicher darauf ein, wie man sie erstellt oder wo sie zu finden sind und welche Möglichkeiten sich mit Skripten in der PowerShell ergeben.

 

Fertige PowerShell-Scripte zur Automatisierung herunterladen

Im Internet finden sich eine Vielzahl an Scripten, die auf die PowerShell aufbauen und verschiedene Verwendungszwecke haben. Microsoft bietet auf der Webseite Scriptressourcen für IT-Experten viele kostenlose Scripte an, die Sie herunterladen, nutzen, aber auch ergänzen können. Achten Sie darauf, dass das Script möglichst aktuell ist und eine gute Bewertung hat. Auf der Downloadseite wird auch angezeigt, für welche Betriebssysteme das Script freigegeben wurde. Auch die Lizenzbedingungen der Scripte werden beim Herunterladen angezeigt.

 

Das müssen Sie über PowerShell-Scripte wissen

PowerShell-Scripte können umfassende Anpassungen an Systemen vornehmen. Sie sollten sich vor der Ausführung also das Script ansehen und überprüfen, dass keine Aktionen durchgeführt werden, die Sie nicht wollen. In PowerShell-Scripten können Sie nicht nur mit den PowerShell-Befehlen (Cmdlets) arbeiten, sondern auch andere Befehle nutzen, zum Beispiel aus der Eingabeaufforderung. Auch Tools von Drittherstellern können in PowerShell-Scripten eingesetzt werden.

Gute PowerShell-Scripte sollten digital signiert sein, sodass die Ausführungsrichtlinie (siehe erster Teil des Beitrags) diese nicht blockiert. Im Notfall können Sie die Ausführungsrichtlinie der PowerShell zwar ausschalten. Dann laufen zwar auch nicht signierte Scripte, allerdings ist ihr System dann nicht mehr geschützt. Bei der Ausführungsrichtlinie handelt es sich allerdings um keinen vollständigen Schutz. Die ExecutionPolicy schützt das System davor, dass aus Versehen ein Script startet. Die ExecutionPolicy ist daher kein umfassendes Sicherheits-Feature. Das Ausschalten der Richtlinie erfordert den Start der PowerShell über das Kontextmenü mit administrativen Rechten (siehe Abb. 1).

Screenshot: Start menu in Windows 10, context menu of the PowerShell application. The item 'Run as administrator' is highlighted

Abbildung 1: Um Anpassungen an der PowerShell und der Ausführungsrichtlinie vorzunehmen, muss PowerShell als Administrator ausgeführt werden

Mit dem folgenden Befehl schalten Sie die Ausführungsrichtlinie aus:

Set-ExecutionPolicy Unrestricted

Die verschiedenen Optionen haben wir im ersten Beitrag der Reihe bereits behandelt. Bei Scripten aus dem Internet sollten Sie darauf achten, dass diese von einer seriösen Quelle stammen. Außerdem sollte im Script durch Kommentare gekennzeichnet sein, welche Aktionen durchgeführt werden. Am Anfang eines Scriptes sollte es Informationen geben, wer das Script erstellt hat, welche Aufgaben es erfüllt, und was Benutzer darüber wissen sollten (siehe Abb. 2).

Screenshot: PowerShell Script, whose header contains further information about the origin, requirements and execution of the script.

Figure 2: Scripts should contain enough information for users to understand what the script is doing when it is started.

Generell ist es sinnvoll, dass in den Kommentaren innerhalb von Scripten darauf hingewiesen wird, welche Aktionen im Script folgen und ob Anwender unter Umständen am Script etwas bearbeiten müssen.

 

PowerShell Scripte starten

Um ein Script zu starten, wird es zunächst in ein Verzeichnis auf den Computer heruntergeladen. Danach wird das Script über seine *.ps1-Datei aufgerufen. Viele Scripte benötigen für den Start noch verschiedene Parameter. Darüber sollten Sie entweder am Anfang des Scriptes informiert werden, oder in der Hilfe sollten die Optionen dokumentiert sein. Befinden Sie sich im Verzeichnis, in dem auch das Script gespeichert ist, müssen Sie das Script nach der Syntax „.skript.ps1“ starten.

 

Scripte selbst erstellen

Wollen Sie Scripte selbst erstellen, sollten Sie auf einen passenden Editor setzen. Beispiele dafür sind die Windows PowerShell Integrated Scripting Environment (ISE), die Bestandteil von Windows ist, Microsoft Visual Studio Code, der Open Source-Editor von Microsoft, oder die Open Source-Lösung Notepad++.

 

Erstellen von Scripten lernen

Um den Umgang mit PowerShell-Scripten zu erlernen, ist es nicht unbedingt notwendig Kurse zu buchen. Im Internet sind verschiedene Seiten zu finden, die beim Lernen mit der PowerShell unterstützen. Auch YouTube-Videos helfen beim Lernen der PowerShell. Bekannte Beispiele dafür sind:



ISEStereoids – Erweiterung für Windows PowerShell ISE

Mit ISESteroids wird Windows PowerShell ISE zur Bearbeitung von Scripten genutzt, aber erweitert. Für die Verwendung muss mit „Start-Steroids“ die Erweiterung nur geladen werden. Es handelt sich dabei um ein PowerShell-Modul, keine zusätzliche Anwendung, welche die PowerShell ISE ersetzt.

Idera PowerShell Plus – Kostenloser Editor

Der kostenlose Editor PowerShell Plus von Idera bietet eine Entwicklungsumgebung für PowerShell-Scripte. Zur Anwendung gehören bereits fertige Script-Teile, die Sie in Ihre Scripte übernehmen können. Generell entspricht der Funktionsumfang von Idera PowerShell Plus den Möglichkeiten der PowerShell ISE, und zusätzlich der Möglichkeit Scripte aus Vorlagen zusammenzustellen. Nach der Installation starten Sie die Anwendung. Erhalten Sie einen Rechtefehler, starten Sie die Anwendung über das Kontextmenü mit Administratorrechten.

Nach dem Start erscheint ein Assistent, der bei der Einrichtung des Editors hilft. Während der Einrichtung können Sie zum Beispiel auch die Ausführungsrichtlinie für Scripte steuern und sehen den aktuellen Zustand. Außerdem können Sie SQL-Server an den Editor anbinden, um PowerShell-Scripte direkt für SQL-Server ausführen zu können. Danach können Sie mit der Bearbeitung von Scripten beginnen.

 

Visual Studio Code mit der PowerShell nutzen

Wir haben in den vorangegangenen Abschnitten bereits Visual Studio Code von Microsoft erwähnt. Mit der kostenlosen Entwicklungsumgebung können Sie nicht nur mit Programmiersprachen arbeiten, sondern auch PowerShell-Scripte herunterladen und eigene Scripte entwickeln.

PowerShell Visual Studio Code, Script

Abbildung 3: Auch mit Visual Studio Code können Sie PowerShell-Scripte entwickeln.

Visual Studio Code (VSCode) erlaubt die Entwicklung von plattformübergreifenden Apps und Anwendungen. Mit Windows, Linux und macOS X werden die wichtigsten Plattformen unterstützt. Microsoft stellt Visual Studio Code (VSCode) kostenlos als Opensource Download zur Verfügung. PowerShell Core ist die neue Version der PowerShell, die auch für Linux und macOS X zur Verfügung steht. Diese neue Version lässt sich auch mit Visual Studio Code nutzen. Auf der Registerkarte „Terminal“ in Visual Studio Code können die Shells geöffnet werden, die durch VSCode unterstützt werden. Hier ist auch die PowerShell verfügbar. Über die Tastenkombination „STRG+P“ oder „CMD+P“ (macos X) erscheint im oberen Bereich eine Suchleiste. Hier lassen sich Erweiterungen für VSCode installieren, zum Beispiel die PowerShell (siehe Abb. 3). Dazu wird der Befehl „ext install powershell“ eingegeben.

 

PowerShell Core in Linux nutzen

Die im letzten Abschnitt erwähnte PowerShell Core ist auch in Linux nutzbar. Um die PowerShell Core auf einem Linux-Rechner zu installieren, müssen Sie zuerst die Public Repositories GPG Keys importieren:

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list

Danach wird das Ubuntu-Repository von Microsoft registriert und ein Update durchgeführt:

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
sudo apt-get update

PowerShell Linux, Ubuntu

Abbildung 4: PowerShell Core wird über das Ubuntu-Repository von Microsoft importiert

Anschließend wird die PowerShell installiert und kann auch gleich gestartet werden:

sudo apt-get install -y powershell

Nach der Installation steht die PowerShell zur Verfügung und es kann mit der Shell gearbeitet werden, auch für das Erstellen von Scripten.

 

Eigene PowerShell-Scripte umsetzen

Auf Basis der Tools und Betriebssysteme, sowie den Vorgehensweisen in diesem Beitrag und dem ersten Teil des Beitrags können Sie auch eigene Scripte erstellen. Parallel zu den Cmdlets, die für das Erstellen von Scripten zur Verfügung stehen, bietet die PowerShell auch erweiterte Möglichkeiten an. Mit dem Cmdlet „Start-Sleep“ stoppen Sie zum Beispiel Windows PowerShell-Aktivitäten. Mit dem Befehl „Start-Sleep -s 10“ hält das Script zehn Sekunden an. „Start-Sleep -m 10000“ verwendet Millisekunden. Übergeben Sie die Ausgabe von Cmdlets mit dem Pipeline-Operator „| Out-Printer“ an das Cmdlet „Out-Printer“, druckt die PowerShell die Ausgabe auf dem Standarddrucker aus.

Den Drucker können Sie auch in Anführungszeichen und der Bezeichnung in der Druckersteuerung angeben. Mit dem Cmdlet „Write-Warning“ lassen sich eigene Warnungen in der PowerShell anzeigen. „Write-Host“ schreibt Ausgaben in die PowerShell Console/Host, wenn es eine gibt. Diese beiden Befehle finden Sie oft in Scripten, die Sie in der PowerShell-Gallery herunterladen können. Die Farben für die Ausgabe konfigurieren Sie mit „-ForeGroundColor“ und „-BackGroundColor“.

Mit Variablen arbeiten

Interessant ist auch die Möglichkeit, dass Sie innerhalb der Shell auch Variablen definieren können.  Diese Variablen können Sie innerhalb eines Scripts verwenden. Wollen Sie zum Beispiel das aktuelle Datum als Variable $heute hinterlegen, können Sie in der Shell den Befehl $heute = Get-Date eingeben. Anschließend wird das heutige Datum als Variable $heute hinterlegt. Geben Sie als nächstes in der Shell $heute ein, wird das aktuelle Datum ausgegeben.

Der Befehl Get-Date -Displayhint Date zeigt nur das Datum, Get-Date -Displayhint Time nur die Uhrzeit an. Sie können ermitteln, welche Art von Objekt von einem bestimmten Cmdlet abgerufen wird, indem Sie die Ergebnisse des Befehls Get mit einem Pipelineoperator (|) an den Befehl Get-Member übergeben. So können Sie mit dem Befehl Get-Service | Get-Member abgerufenen Objekte an Get-Member senden.

Mit diesem Befehl lassen sich Informationen über das .NET-Objekt anzeigen, das von einem Befehl zurückgegeben wird. Zu den Informationen zählen der Typ, die Eigenschaften und die Methoden des Objekts. Wenn Sie beispielsweise alle Eigenschaften eines Dienstobjekts anzeigen wollen, geben Sie folgenden Befehle in:

Get-Service | Get-Member -MemberType *property

Dateien und Objekte kopieren, löschen und verwalten

Mit dem Cmdlet Copy-Item kopieren Sie in Scripten Dateien oder Ordner. Auch Registryschlüssel und Zertifikate und vieles mehr lassen sich kopieren. Mit dem Befehl Copy-Item C:\\Scriptstest.txt C:\\Test kopieren Sie zum Beispiel die Datei test.txt.

Der Befehl Copy-Item C:\\Scripts* C:\\Test kopiert alle Dateien im entsprechenden Quellordner in den Zielordner. Der Befehl Copy-Item C:\\Scripts C:\\Test -Recurse legt eine Kopie des Ordners C:Scripts im Ordner C:\\Test an. Ohne die Option -Recurse wird in C:\\Test ein Ordner Scripts angelegt, es werden aber keine Dateien und Ordner kopiert. Neben dem vollständigen Befehl kann auch mit den Abkürzungen cpi, cp oder copy gearbeitet werden.

Das Cmdlet Move-Item verschiebt Objekte: Move-Item C:\\Scriptstest.zip c:\\test. Auch hier können Sie mit Platzhaltern arbeiten, genauso wie beim Kopieren. Standardmäßig überschreibt Move-Item vorhandene Dateien im Zielordner nicht. Mit dem Parameter -Force werden vorhandene Zieldateien oder Ordner überschrieben: Move-Item C:\\Scriptstest.zip C:\\Test -Force. Mit dem Befehl Move-Item C:\\Scriptstest.log C:\\Testad.log verschieben Sie Dateien und benennen diese gleichzeitig um.

Neben Move-Item können Sie auch mit mi, mv oder move arbeiten. Mit dem Cmdlet New-Item erstellen Sie neue Dateien oder Ordner. Mit dem Befehl New-Item C:\\TempPowerShell -Type Directory erstellen Sie im Ordner C:\\Temp einen neuen leeren Ordner mit der Bezeichnung PowerShell.

Um eine neue Datei zu erstellen, verwenden Sie die gleiche Syntax, aber den Typ File: New-Item C:\\Scriptsskript.txt -Type File. Mit dem Befehl New-Item C:\\Scriptsskript.txt -Type File -Force ersetzen Sie eine vorhandene Datei durch eine neue leere Datei. Mit dem Befehl New-Item C:\\Scriptsskript.txt -Type File -Force -Value „Text“ erstellen Sie eine neue Datei mit dem angegebenen Text als Inhalt. Statt New-Item können Sie auch ni verwenden.

Mit dem Cmdlet Add-Content fügen Sie Daten an eine Textdatei an: Add-Content C:\\Scriptstest.txt „Text“. Standardmäßig fügt Add-Content den neuen Wert hinter dem letzten Zeichen in der Textdatei ein.

Den Inhalt einer Datei ersetzen Sie mit Set-Content. Das Cmdlet Clear-Content löscht den Inhalt einer Datei. Nach der Ausführung existiert die Datei weiterhin, hat aber keinen Inhalt mehr. Auch hier können Sie mit Platzhalterzeichen arbeiten: Clear-Content C:\\Teste*. Neben Textdateien unterstützt das Cmdlet auch Excel-Tabellen, Word-Dokumente und andere Dateien. Statt Clear-Content können Sie auch clc verwenden. Das Cmdlet Remove-Item löscht Objekte: Remove-Item C:\\Scriptstest.txt.

Mit dem Platzhalterzeichen * löschen Sie Objekte in einem angegebenen Ordner: Remove-Item C:\\Scripts*. Mit dem Befehl Remove-Item C:\\Scripts* -Recurse muss das Löschen nicht bestätigt werden. Der Befehl Remove-Item C:\\Scripts* -Exclude *.doc löscht alle Dateien, außer denen, die Sie mit -Exclude ausgeschlossen haben. Remove-Item C:\\Scripts* -Include .xls,.doc löscht nur die Dateien hinter -Include. Beide Optionen können Sie auch gemeinsam verwenden, zum Beispiel: Remove-Item C:\\Scripts* -Include *.txt -Exclude *test*.

Hier löscht die PowerShell alle Textdateien im Ordner, außer Dateien mit der Zeichenfolge »test« im Dateinamen. Der Parameter -Whatif entfernt nichts, gibt aber aus, was passieren würde: Remove-Item C:\\windows*.exe -Whatif.

Statt Remove-Item können Sie auch ri, rd, erase, rm, rmdir oder del verwenden. Vorhandene Objekte benennen Sie mit dem Cmdlet Rename-Item um: Rename-Item C:\\Scriptstest.txt neu.txt. Die Befehle rni und ren führen ebenfalls zum Ziel.

 

ActionPack-176x176

Stocken Sie Ihre PowerShell-Scriptsammlung auf!

Besuchen Sie unser GitHub-Reposito
ry und entdecken Sie unsere kostenlose Sammlung von mehr als 1000 gebrauchsfertigen PowerShell-Scripten für O365, Active Directory, Exchange, VMware und viele weitere. ActionPacks – kostenlose PowerShell Scriptsammlungen

Zusammenhängende Posts

Über den Autor: