Definition

PowerShell

PowerShell ist eine objektorientierte Automatisierungs-Engine und Skriptsprache mit einer interaktiven Befehlszeile, die Microsoft entwickelt hat, um IT-Experten bei der Konfiguration von Systemen und der Automatisierung von Verwaltungsaufgaben zu unterstützen.

PowerShell basiert auf dem .NET-Framework und arbeitet mit Objekten, während die meisten Kommandozeilen-Shells auf Text basieren. PowerShell eignet sich aufgrund seiner Skriptfunktionen als Automatisierungstool für Systemadministratoren, sowohl in IT-Abteilungen als auch in externen Teams bei Managed Service Providern.

PowerShell entstand als proprietäres Angebot, das nur unter Windows verfügbar war. Seit dem Jahr 2016 gab es eine zusätzliche PowerShell als Open Source, die sich auch für Linux und macOS eignete. Seit der Version 7.0 ist die Mainstreamversion von PowerShell die Open-Source-Version.

Was kann PowerShell?

Microsoft hat PowerShell entwickelt, um Systemaufgaben wie die Stapelverarbeitung zu automatisieren und Systemverwaltungstools für häufig implementierte Prozesse zu erstellen. Die PowerShell-Sprache bietet ähnlich wie Perl mehrere Möglichkeiten zur Automatisierung von Aufgaben:

  • mit Cmdlets, bei denen es sich um sehr kleine .NET-Klassen handelt, die als Systembefehle angezeigt werden;
  • mit Skripten, die Kombinationen von Cmdlets und zusätzlicher Logik sind;
  • mit ausführbaren Dateien, bei denen es sich um eigenständige Tools handelt; und
  • durch das Instanziieren von Standard-.NET-Klassen.

Administratoren können PowerShell verwenden, um eine Vielzahl von Aktivitäten abzuwickeln. Es kann Informationen zu Betriebssystemen extrahieren, zum Beispiel die spezifische Version und die Service-Pack-Levels. PowerShell-Anbieter sind Programme, die Daten aus spezialisierten Datenspeichern über die Kommandozeile zugänglich machen. Zu diesen Datenspeichern gehören Dateisystemlaufwerke und Windows Registries.

PowerShell kann die gleichen Aufgaben erfüllen, wie die Eingabeaufforderung, die auf DOS zurückgeht. Microsoft hat PowerShell ab Build 14791 zur Standard-Befehlszeilenschnittstelle (Command Line Interface, CLI) für Windows 10 gemacht.

Wichtige PowerShell-Funktionen

Microsoft integriert Updates und zusätzliche Funktionen mit jeder neue Version von PowerShell. Daher erhebt die folgende Liste mit wichtigen PowerShell-Funktionen keinen Anspruch auf Vollständigkeit.

Discoverability. Benutzer können Informationen zu Funktionen von PowerShell mit Cmdlets wie Get-Command einholen. Es listet alle Befehle auf, einschließlich Cmdlets und Funktionen, die auf einem bestimmten Computer verfügbar sind. Parameter können den Umfang der Suche einzugrenzen.

Hilfefunktionen. Benutzer können über das Cmdlet Get-Help mehr über die Funktionsweise von PowerShell und bestimmte Komponenten wie Cmdlets erfahren. Der Parameter -online bietet Zugriff auf Hilfeartikel im Web – so vorhanden.

Remote-Befehle. Administratoren können aus der Ferne Vorgänge auf einem oder mehreren Computern ausführen und dabei Technologien wie Windows Management Instrumentation und die WS-Verwaltung nutzen. Mit dem WS-Management-Protokoll führen Benutzer beispielsweise PowerShell-Befehle und -Skripte auf Remotecomputern aus.

Pipelines. In PowerShell verknüpfen Sie Befehle über den Pipe-Operator, als | miteinander. Bei diesem Ansatz wird die Ausgabe eines bestimmten Befehls zur Eingabe für den nächsten Befehl in der Pipeline-Sequenz. Die PowerShell-Pipeline lässt Objekte von einem Cmdlet zu einem anderen fließen.

Details zu zusätzlichen Funktionen finden Sie in den folgenden Abschnitten.

Desired State Configuration

Mit PowerShell 4.0 hat Microsoft eine Konfigurationsverwaltungsplattform namens Desired State Configuration (DSC) eingeführt, mit der Administratoren einen gewünschten Zustand für ihre Server festlegen. PowerShell stellt dann sicher, dass die Zielknoten den gewünschten Zustand beibehalten. DSC hat zwei Betriebsmodi: Push und Pull.

Im Push-Modus sendet ein Server Nachrichten an die Knoten. Es handelt sich um eine unidirektionale Kommunikation, bei der der Administrator Benachrichtigungen von einer Workstation sendet. Das hat den Vorteil, dass Sie nur ein einziges Gerät brauchen, um das System zu verwalten – das bedeutet aber auch, dass es keine Nachrichten mehr gibt, wenn dieses eine Gerät vom Netzwerk getrennt ist.

Im Push-Modus erstellt die IT-Abteilung eine MOF-Datei mit den Konfigurationsdetails jedes Knoten, die sie auf dem Push-Server ablegen. Jeder Knoten kontaktiert regelmäßig den Pull-Server, um nach einer neuen Konfiguration zu suchen. Wenn die neue Konfiguration verfügbar ist, sendet der Pull-Server die Konfiguration an den Knoten. Administratoren können alle Geräte unabhängig von ihrer Netzwerkverbindung verwalten. Wenn sich ein Gerät mit dem Netzwerk verbindet, kontaktiert es automatisch den Pull-Server, um nach einer neuen Konfiguration zu suchen.

DSC-Ressourcen

DSC-Ressourcen sind die Komponenten eines Konfigurationsskripts. Administratoren können die verfügbaren DSC-Ressourcen auf einem Computer mit dem Befehl Get-DscResource überprüfen.

Administratoren verwenden diese Ressourcen, um Komponenten wie Registrierungsschlüssel und Windows-Dienste zu konfigurieren oder lokale Benutzer über ein Konfigurationsskript zu erstellen und zu verwalten. Die Ressource Datei verwaltet beispielsweise Dateien und Ordner, die Ressource Umgebung verwaltet Umgebungsvariablen und die Ressource Registrierung verwaltet die Registrierungsschlüssel eines Knotens.

Integrierte PowerShell-Skriptumgebung

PowerShell Integrated Scripting Environment (ISE), eingeführt von Microsoft in PowerShell Versionion 2.0, ist eine PowerShell-Hostanwendung für dasSchreiben, Testen und Debuggen von Skripten oder zum Schreiben von Befehlen in einer grafischen Benutzeroberfläche (GUI).

PowerShell ISE bietet mehrere nützliche Funktionen wie Syntaxfärbung, mehrzeilige Bearbeitung, kontextbezogene Hilfe und Vervollständigung von Registerkarten.

Sie verfügt außerdem über einige Funktionen, die Benutzer schon aus anderen Windowsprogrammen kennen. Sie können zum Beispiel einen Teil eines Befehls markieren, kopieren und wieder einfügen. Eine weitere nützliche Funktion ist es, verschiedene Versionen eines Befehls im Editor zu hinterlegen.

Die Taste F5 startet einen Befehl direkt aus dem Editor. Um eine bestimmte Zeile auszuführen, wählen Sie sie aus und drücken Sie F8. Die kontextsensitive Hilfe zeigt passende Cmdlets an, wenn der Benutzer mit der Eingabe eines Befehls beginnt. Ein Befehls-Add-On gibt außerdem eine Liste von Cmdlets zur Auswahl.

PowerShell ISE bietet Registerkarten, um die Arbeit an mehreren Verwaltungsaufgaben zu ermöglichen. Außerdem können Sie schnell vom vom CLI- in den Skriptmodus umschalten.

PowerShell-Module

PowerShell-Module ermöglichen es Administratoren, ein Skript wiederzuverwenden, um eine Aufgabe zu automatisieren. Ein PowerShell-Modul kann als eine Reihe von PowerShell-Funktionen definiert werden, die gruppiert sind, um alle Aspekte eines bestimmten Bereichs zu verwalten. PowerShell-Module ermöglichen es Administratoren, Code zu referenzieren, zu laden, zu speichern und zu teilen. Die einfachste Möglichkeit, ein PowerShell-Modul zu erstellen, ist das Speichern des Skriptes als PSM1-Datei.

Ein PowerShell-Modul enthält vier wesentliche Elemente:

  • eine PSM-Datei, die das Modul enthält;
  • Hilfedateien oder Skripte, die vom Modul benötigt werden;
  • eine Manifestdatei, die das Modul beschreibt; und
  • ein Verzeichnis, das den Inhalt speichert.

Ein PowerShell-Modul kann zu einem von vier Typen gehören:

  • Skriptmodul: Eine PSM1-Datei, die verschiedene Funktionen enthält, zum Beispiel für Import-, Export- und Verwaltung.
  • Binärmodul: Eine .NET Framework-Assembly (DLL-Datei), die kompilierten Code enthält. Entwickler verwenden normalerweise ein binäres Modul, um Cmdlets mit leistungsstarken Funktionen zu erstellen, die mit einem PowerShell-Skript nicht zu realisieren sind.
  • Manifestmodul: Ein Manifestmodul ist eine Moduldatei (PSM1) mit einer zugehörigen PSD1-Datei (Manifest).
  • Dynamisches Modul: Ein dynamisches Modul wird bei Bedarf dynamisch durch ein Skript erstellt. Es wird nicht gespeichert oder in den persistenten Speicher

PowerShell-Funktionen

Eine PowerShell-Funktion ähnelt einem PowerShell-Cmdlet, mit einigen geringfügigen Unterschieden. Cmdlets sind in einer kompilierten .NET-Sprache wie C# geschrieben, während Funktionen in PowerShell geschrieben und nicht kompiliert werden.

Für Entwickler und unabhängige Softwareanbieter ist das Verpacken und Bereitstellen eines PowerShell-Cmdlets einfacher als das Verpacken von Funktionsbibliotheken. Cmdlets und erweiterte Funktionen unterstützen leistungsstarke Parameterbindungen.

Ein Beispiel für eine PowerShell-Funktion ist:

function Set-Something {
   [CmdletBinding()]
   param (
     [Parameter()]
     [string]$Thing
   )
 
   Write-Host $Thing
 }

Eine Funktion enthält einen oder mehrere Optionsparameter innerhalb eines Parameterblocks und eines Hauptteils.

Sprachkonstrukte

In seiner Skriptsprache bietet PowerShell mehrere Sprachkonstrukte, die den Fluss von Skripten und gleichzeitig Entscheidungen steuern. Einige der Sprachkonstrukte umfassen Bedingungen, Schalter, Schleifen und Variablen.

Bedingungen. Das Sprachkonstrukt if kennzeichnet eine Bedingung. Trifft sie zu, führt PowerShell einen Skriptblock aus.

if ($i -eq 1)
 {
   ## Do something
 }
 else
 {
   ## Do something else
 }

Schalter. Switch ist gut dazu geeignet, eine lange Liste von bedingten Anweisungen zu testen. Switch wird häufig statt vieler if/then/else-Konstrukte verwendet.

switch ($i) {
   0
   {
     Write-Host "I is 0"
   }
   1
   {
     Write-Host "I is 0"
   }
   Default
   {
     Write-Host "I is not 0 or 1"
   }
 }

Schleifen. Die while-Anweisung wiederholt Code, solange die nachfolgende Bedingung erfüllt ist.

while ($i -eq 0) {
   ## Do somthing
 }

Die do-Schleife ähnelt der while-Schleife. Der einzige Unterschied besteht darin, dass PowerShell die do-Schleife am Ende des Befehls ausführt.

do {

   ## do something

 } while ($i -lt 0)

Wenn Sie eine foreach-Schleife verwenden, wiederholt PowerShell den Code für jedes im Skript erwähnte Element.

$array = ('item1','item2','item3')

 foreach ($item in $array) {

   $item

 }

Verwenden Sie eine for-Schleife, um Anweisungen wiederholt auszuführen, bis eine Bedingung erfüllt ist.

for ($i = 0; $i -lt 5; $i++)
 {
   $i
 }

Variablen

Variablen speichern Daten, aber PowerShell-Variablen sind leistungsfähiger, da sie zugrunde liegenden Klassen im .NET-Framework zugeordnet werden können. PowerShell behandelt Variablen als .NET-Objekte, was bedeutet, dass sie Daten speichern und auf verschiedene Weise bearbeiten können.

Variablennamen in PowerShell beginnen mit einem Dollarzeichen und enthalten eine Mischung aus Zahlen, Buchstaben, Symbole und Leerzeichen. So speichert $var="HELLO" die Zeichenfolge HELLO in der Variablen $var. Variablen können auch unterschiedliche Gültigkeitsbereiche haben, zum Beispiel globale, lokale, Skript-, private und nummerierte Gültigkeitsbereiche.

Arrays

Ein PowerShell-Array ist eine Komponente, die das Speichern von mehr als einem Element in einer Variablen oder einem Feld ermöglicht. Um beispielsweise einer Variablen mehrere Werte zuzuweisen, verwenden Sie das folgende Skript:

$a=1,2,3

PowerShell behandelt jedes Element in einem Array als separates Element. Um jedes Element in einem Array zu adressieren, bietet PowerShell Indexnummern. Das erste Element im Array ist standardmäßig mit 0 indiziert. Der größte Vorteil von PowerShell besteht darin, dass sie Arraus automatisch einfügt, sodass sie beim Hinzufügen oder Entfernen von Elementen nicht manuell zerstört oder erstellt werden müssen.

Hash-Tabellen

Hash-Tabellen sind Datenstrukturen ähnlich wie Arrays. Ein PowerShell-Array speichert mehrere einzelne Elemente, bei einer Hash-Tabelle wird jedoch jedes Element oder jeder Wert mit einem Schlüssel- oder Wertpaar gespeichert. Ein Array kann im Gegensatz zu einer Hash-Tabelle nicht mehrere Werte unter jedem Element speichern.

Unten sehen Sie ein Beispiel, das ein Array mit einer Hash-Tabelle vergleicht:

$array = @('Joe','Susie','Donnie')
 $hashtable = @{FirstName = 'Joe'; FirstName = 'Susie'; FirstName = 'Donnie'}

Hilfe und Kommentare

PowerShell ermöglicht das Hinzufügen von Hilfethemen für Module, Skripte und einzelne Befehle. Um alle Hilfethemen anzuzeigen, verwenden Sie, wie bereits erwähnt den Befehl Get-Help.

Beim Importieren eines Moduls in eine Sitzung importiert PowerShell automatisch die Hilfethemen für dieses Modul. Wenn für ein Modul keine Hilfethemen vorhanden sind, zeigt der Befehl Get-Help automatisch generierte Hilfe an. In PowerShell gibt es drei Arten von Hilfeinhalten: kommentarbasierte Hilfe, externe Hilfe und aktualisierbare Hilfe.

Kommentarbasierte Hilfe bezieht sich auf Kommentare, die in einem Skript oder Befehl enthalten sind, damit Get-Help gelesen werden kann. Externe Hilfe ermöglicht es dem Autor, Hilfeinhalte in einer externen XML-Datei zu definieren, die in XAML geschrieben ist. Aktualisierbare Hilfe verwendet externe Hilfe und ermöglicht es Benutzern die neuesten Hilfeinhalte mit dem Befehl Update-Help herunterzuladen.

Ausführbare Programme

PowerShell ist zusätzlich ein Ersatz für cmd.exe, der ein ausführbares Programm auf verschiedene Weise über den Befehl Start-Process, & und den Befehl Invoke-Expression ausführt. Am Beispiel von ping.exe kann ein Benutzer das ausführbare Programm mit PowerShell wie folgt ausführen:

Start-Process -FilePath 'ping.exe' -ArgumentList 'google.com' -Wait -NoNewWindow

 & 'ping.exe' google.com

 ping google.com

 Invoke-Expression -Command 'ping.exe google.com'

Diese Definition wurde zuletzt im Januar 2022 aktualisiert

Erfahren Sie mehr über Serverbetriebssysteme