Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Historisch gesehen sind die Befehlszeilenhilfsprogramme in Unix-Systemen besser entwickelt als in Windows. Mit der EinfĂŒhrung neuer Lösungen hat sich die Situation jedoch geĂ€ndert.

Windows PowerShell ermöglicht es Systemadministratoren, die meisten Routineaufgaben zu automatisieren. Mit ihr können Einstellungen geĂ€ndert, Dienste gestoppt und gestartet sowie die Wartung der meisten installierten Anwendungen durchgefĂŒhrt werden. Es wĂ€re falsch, das blaue Fenster als einen weiteren Befehlsinterpreter zu betrachten. Dieser Ansatz spiegelt nicht die Essenz der von Microsoft vorgeschlagenen Innovationen wider. TatsĂ€chlich sind die Möglichkeiten von Windows PowerShell viel umfangreicher: In einer kurzen Artikelreihe werden wir versuchen herauszufinden, wie sich die Microsoft-Lösung von den uns vertrauten Mitteln unterscheidet.

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Hauptmerkmale 

Windows PowerShell ist in erster Linie eine Kommandozeile mit einer Skriptsprache, die ursprĂŒnglich auf der .NET Framework-Plattform entwickelt wurde und spĂ€ter auf .NET Core umgestellt wurde. Im Gegensatz zu Shells, die Textdaten empfangen und zurĂŒckgeben, arbeitet Windows PowerShell mit .NET-Klassen, die Eigenschaften und Methoden haben. PowerShell ermöglicht es, gewöhnliche Befehle auszufĂŒhren und bietet zudem Zugriff auf COM-, WMI- und ADSI-Objekte. Verschiedene Speicherorte wie das Dateisystem oder die Windows-Registrierung werden verwendet, auf die so genannte Anbieter (providers) zugreifen. Es ist auch erwĂ€hnenswert, dass es möglich ist, ausfĂŒhrbare Komponenten von PowerShell in andere Anwendungen einzubetten, um verschiedene Operationen durchfĂŒhren zu können, auch ĂŒber eine grafische BenutzeroberflĂ€che. Entsprechend können viele Windows-Anwendungen ĂŒber PowerShell auf ihre VerwaltungsoberflĂ€chen zugreifen. 

Windows PowerShell ermöglicht:

  • Einstellungen des Betriebssystems zu Ă€ndern;
  • Dienste und Prozesse zu verwalten;
  • Rollen und Komponenten des Servers zu konfigurieren;
  • Software zu installieren;
  • Installierte Software ĂŒber spezielle Schnittstellen zu verwalten;
  • AusfĂŒhrbare Komponenten in Drittanbieterprogramme einzubetten;
  • Skripte zur Automatisierung von Verwaltungsaufgaben zu erstellen;
  • Mit dem Dateisystem, der Windows-Registrierung, dem Zertifikatspeicher usw. zu arbeiten.

Shell und Entwicklungsumgebung

Windows PowerShell gibt es in zwei AusfĂŒhrungen: Neben dem Konsolenemulator mit der Befehlszeile gibt es eine integrierte Skriptumgebung (Integrated Scripting Environment – ISE). Um auf die Befehlszeilenschnittstelle zuzugreifen, genĂŒgt es, das entsprechende Symbol im Windows-MenĂŒ auszuwĂ€hlen oder powershell.exe aus dem MenĂŒ „AusfĂŒhren“ zu starten. Auf dem Bildschirm erscheint ein blaues Fenster, das sich in den Möglichkeiten deutlich von dem veralteten cmd.exe unterscheidet. Dort gibt es die AutovervollstĂ€ndigung und andere Funktionen, die Unix-Systembenutzern vertraut sind.

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Um mit der Shell zu arbeiten, sollten einige Tastenkombinationen gemerkt werden:

  • Die AufwĂ€rts- und AbwĂ€rtspfeile scrollen durch die Historie zum Wiederholen zuvor eingegebener Befehle;
  • Rechter Pfeil am Ende der Zeile gibt den vorherigen Befehl Zeichen fĂŒr Zeichen wieder ein;
  • Ctrl+Home löscht den eingegebenen Text von der Cursorposition bis zum Anfang der Zeile;
  • Ctrl+End löscht den Text vom Cursor bis zum Ende der Zeile.

F7 zeigt ein Fenster mit eingegebenen Befehlen an und ermöglicht die Auswahl eines davon. In der Konsole funktioniert auch die Textauswahl mit der Maus, Copy-Paste, Cursorpositionierung, Löschen, Backspace – alles wie wir es mögen.

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Windows PowerShell ISE ist eine vollstĂ€ndige Entwicklungsumgebung mit einem Code-Editor, der Tabs und Syntax-Highlighting unterstĂŒtzt, einem Befehlsentwurf, einem integrierten Debugger und anderen Programmiertools. Wenn Sie im Entwicklungsumgebungseditor nach dem Befehlssymbol einen Bindestrich eingeben, erhalten Sie im Dropdown-MenĂŒ alle verfĂŒgbaren Parameter mit der Angabe des Typs. PowerShell ISE kann entweder ĂŒber ein Symbol im SystemmenĂŒ oder ĂŒber die ausfĂŒhrbare Datei powershell_ise.exe gestartet werden.

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Cmdlets 

In Windows PowerShell gibt es die sogenannten Cmdlets. Dies sind spezialisierte .NET-Klassen, die vielfĂ€ltige FunktionalitĂ€ten bieten. Sie sind nach dem Prinzip „Verb-Substantiv“ benannt (oder „Aktion-Objekt“, wenn Ihnen das besser gefĂ€llt), und die durch einen Bindestrich getrennte Verbindung erinnert an PrĂ€dikat und Subjekt in SĂ€tzen natĂŒrlicher Sprachen. Zum Beispiel bedeutet Get-Help wörtlich „Holen-Sie-Hilfe“ oder im Kontext von PowerShell: „Zeigen-Sie-Hilfe“. Im Grunde genommen ist dies das Äquivalent des Befehls man in Unix-Systemen, und die HandbĂŒcher in PowerShell mĂŒssen genau so angefragt werden, und nicht durch den Aufruf von Cmdlets mit dem Schalter —help oder \/?. Vergessen Sie auch nicht die Online-Dokumentation zu PowerShell: Bei Microsoft ist sie ziemlich ausfĂŒhrlich.

Neben Get werden in den Cmdlets auch andere Verben (und nicht nur Verben, streng genommen) zur Bezeichnung von Aktionen verwendet. In der folgenden Liste fĂŒhren wir einige Beispiele an:

HinzufĂŒgen — hinzufĂŒgen;
Clear — bereinigen;
Aktivieren — aktivieren;
Disable — deaktivieren;
Neu — erstellen;
Remove — entfernen;
Set — festlegen;
Start — starten;
Stop — anhalten;
Export — exportieren;
Importieren — importieren.

Es gibt System-, Benutzer- und optionale Cmdlets: Sie geben alle ein Objekt oder ein Array von Objekten zurĂŒck. Sie sind nicht case-sensitiv, d.h. aus Sicht des Befehlsinterpreters gibt es keinen Unterschied zwischen Get-Help und get-help. Zur Trennung wird das Zeichen ';' verwendet, aber es muss nur gesetzt werden, wenn in einer Zeile mehrere Cmdlets ausgefĂŒhrt werden. 

Die Cmdlets von Windows PowerShell werden in Module (z.B. NetTCPIP, Hyper-V usw.) gruppiert, und es gibt ein Cmdlet Get-Command zur Suche nach einem Objekt und einer Aktion. Die Hilfe dafĂŒr kann so angezeigt werden:

Get-Help Get-Command

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

StandardmĂ€ĂŸig zeigt der Befehl eine kurze Hilfe an, aber es können bei Bedarf Parameter (Argumente) an die Cmdlets ĂŒbergeben werden. Damit kann man z.B. eine detaillierte (Parameter -Detailed) oder vollstĂ€ndige (Parameter -Full) Hilfe erhalten sowie Beispiele auf den Bildschirm ausgeben (Parameter -Examples):

Get-Help Get-Command -Examples

Die Hilfe in Windows PowerShell wird mit dem Cmdlet Update-Help aktualisiert. Wenn die Befehlszeile zu lang wird, können die Argumente des Cmdlets auf die nĂ€chste Zeile verschoben werden, indem man das Steuerzeichen '`' eingibt und Enter drĂŒckt — es ist nicht möglich, den Befehl einfach auf einer Zeile zu beenden und auf der nĂ€chsten fortzusetzen.

Hier sind einige Beispiele fĂŒr gĂ€ngige Cmdlets: 

Get-Process — zeigt die im System laufenden Prozesse an;
Get-Service — zeigt Dienste und deren Status an;
Get-Content — gibt den Inhalt einer Datei aus.

FĂŒr hĂ€ufig verwendete Cmdlets und externe Tools gibt es in Windows PowerShell kurze Synonyme — Aliase (von engl. Alias). Zum Beispiel, dir — Alias fĂŒr Get-ChildItem. Aus der Liste der Synonyme gibt es auch Analogien zu Befehlen aus Unix-Systemen (ls, ps usw.), und das Cmdlet Get-Help wird mit dem Befehl help aufgerufen. Die vollstĂ€ndige Liste der Synonyme kann mit dem Cmdlet Get-Alias angezeigt werden:

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Skripte, Funktionen, Module und die Sprache PowerShell

Windows PowerShell-Skripte werden als gewöhnliche Textdateien mit der Erweiterung .ps1 gespeichert. Sie können nicht durch Doppelklick gestartet werden: Sie mĂŒssen mit der rechten Maustaste das KontextmenĂŒ aufrufen und den Punkt „In PowerShell ausfĂŒhren“ auswĂ€hlen. Aus der Konsole mĂŒssen Sie entweder den vollstĂ€ndigen Pfad zum Skript angeben oder in das entsprechende Verzeichnis wechseln und den Dateinamen eingeben. Das AusfĂŒhren von Skripten ist zudem durch die Systemrichtlinien eingeschrĂ€nkt, und zur ÜberprĂŒfung der aktuellen Einstellungen kann das Cmdlet Get-ExecutionPolicy verwendet werden, das einen der folgenden Werte zurĂŒckgibt:

Restricted — das AusfĂŒhren von Skripten ist verboten (Standard);
AllSigned — nur das AusfĂŒhren von signierten Skripten, die von einem vertrauenswĂŒrdigen Entwickler stammen, ist erlaubt;
RemoteSigned — das AusfĂŒhren von signierten und eigenen Skripten ist erlaubt;
Unrestricted — das AusfĂŒhren beliebiger Skripte ist erlaubt.

Der Administrator hat zwei Handlungsoptionen. Die sicherste besteht darin, die Skripte zu signieren, aber das ist ein ziemlich komplexer Prozess – wir werden uns in den folgenden Artikeln damit befassen. Jetzt gehen wir den einfacheren Weg und Ă€ndern die Richtlinie:

Set-ExecutionPolicy RemoteSigned

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
PowerShell muss dafĂŒr mit Administratorrechten gestartet werden, obwohl die Richtlinie auch fĂŒr den aktuellen Benutzer geĂ€ndert werden kann, wenn ein spezieller Parameter verwendet wird.

Skripte werden in einer objektorientierten Programmiersprache geschrieben, deren Befehle nach dem gleichen Prinzip benannt sind wie die zuvor behandelten Cmdlets: „Aktion-Objekt“ („Verb-Nomen“). Ihr Hauptzweck ist die Automatisierung von Administrationsaufgaben, jedoch handelt es sich um eine voll funktionsfĂ€hige interpretierte Sprache, die alle erforderlichen Konstrukte enthĂ€lt: bedingte Anweisungen, Schleifen, Variablen, Arrays, Objekte, Fehlerbehandlung usw. Zum Schreiben von Skripten kann jeder Texteditor verwendet werden, aber am bequemsten ist es, Windows PowerShell ISE zu starten.

Im Skript können Parameter ĂŒbergeben, als erforderlich gekennzeichnet und Standardwerte festgelegt werden. DarĂŒber hinaus ermöglicht Windows PowerShell die Erstellung von Funktionen, die ebenso wie Cmdlets aufgerufen werden können: dafĂŒr wird die Konstruktion Function und die geschweiften Klammern verwendet. Skripte mit Funktionen werden als Module bezeichnet und haben die Erweiterung .psm1. Module sollten in Verzeichnissen gespeichert werden, die in den Umgebungsvariablen von PowerShell definiert sind. Diese können mit dem folgenden Befehl angezeigt werden:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

FörderbÀnder

Im letzten Beispiel haben wir eine Struktur verwendet, die den Benutzern von Unix-Shells vertraut ist. In Windows PowerShell ermöglicht das Pipe-Zeichen ebenfalls die Weitergabe der Ausgabe eines Befehls als Eingabe fĂŒr einen anderen, aber es gibt einen wesentlichen Unterschied in der Implementierung der Pipeline: Hier geht es nicht mehr um eine Zeicheneingabe oder irgendeinen Text. Eingebaute Cmdlets oder benutzerdefinierte Funktionen geben Objekte oder Objektarrays zurĂŒck und können auch diese als Eingabe nehmen. Wie im Bourne-Shell und seinen zahlreichen Nachfolgern vereinfacht PowerShell mithilfe der Pipeline die AusfĂŒhrung komplexer Aufgaben.

Ein einfaches Beispiel fĂŒr eine Pipeline sieht so aus:

Get-Service | Sort-Object -property Status

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
ZunĂ€chst wird das Cmdlet Get-Service ausgefĂŒhrt, und dann werden alle damit erhaltenen Dienste fĂŒr die Sortierung nach dem Status an das Cmdlet Sort-Object ĂŒbergeben. In welches Argument das Ergebnis des vorherigen Abschnitts der Pipeline ĂŒbergeben wird, hĂ€ngt von seinem Typ ab — in der Regel ist dies InputObject. Dieses Thema wird ausfĂŒhrlicher in einem Artikel zur Programmiersprache PowerShell behandelt werden. 

Wenn gewĂŒnscht, kann die Kette fortgesetzt werden, und das Ergebnis von Sort-Object kann an ein weiteres Cmdlet ĂŒbergeben werden (die AusfĂŒhrung erfolgt von links nach rechts). Übrigens steht Windows-Benutzern auch die allen Unix-Nutzern vertraute Struktur fĂŒr die seitenweise Ausgabe zur VerfĂŒgung: 

Get-Service | Sort-Object -property Status | more

Aufgaben im Hintergrund ausfĂŒhren 

Es kommt hĂ€ufig vor, dass eine bestimmte BefehlsausfĂŒhrung im Hintergrund gestartet werden muss, um nicht auf das Ergebnis in der Shell-Sitzung zu warten. In Windows PowerShell gibt es dafĂŒr mehrere Cmdlets:

Start-Job — zum Starten einer Hintergrundaufgabe;
Stop-Job — zum Stoppen einer Hintergrundaufgabe;
Get-Job — um die Liste der Hintergrundaufgaben zu sehen;
Receive-Job — um das Ergebnis der AusfĂŒhrung einer Hintergrundaufgabe anzusehen;
Remove-Job — zum Löschen einer Hintergrundaufgabe;
Wait-Job — um eine Hintergrundaufgabe wieder in die Konsole zu bringen.

Um eine Hintergrundaufgabe zu starten, verwenden wir das Cmdlet Start-Job und geben in geschweiften Klammern den Befehl oder die Befehle an:

Start-Job {Get-Service}

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Mit Hintergrundaufgaben in Windows PowerShell kann man manipulieren, indem man ihre Namen kennt. ZunÀchst lernen wir, sie anzuzeigen:

Get-Job

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Jetzt zeigen wir das Ergebnis der Arbeit der Aufgabe Job1 an:

Receive-Job Job1 | more

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Alles ist ziemlich einfach.

AusfĂŒhren von Befehlen ĂŒber Remote-Zugriff

Windows PowerShell ermöglicht die AusfĂŒhrung von Befehlen und Skripten nicht nur auf lokalen, sondern auch auf entfernten Computern und sogar auf einer ganzen Gruppe von Maschinen. DafĂŒr gibt es mehrere Möglichkeiten:

  • Viele Cmdlets haben ein Parameter -ComputerName, aber auf diese Weise ist es beispielsweise nicht möglich, eine Pipeline zu erstellen;
  • Das Cmdlet Enter-PSSession ermöglicht die Erstellung einer interaktiven Sitzung auf einem entfernten Computer; 
  • Mit dem Cmdlet Invoke-Command kann man Befehle oder Skripte auf einem oder mehreren entfernten Computern ausfĂŒhren.

Versionen von PowerShell

Seit der ersten Veröffentlichung im Jahr 2006 hat sich PowerShell erheblich weiterentwickelt. Das Tool ist fĂŒr viele Systeme verfĂŒgbar, die auf verschiedenen Hardwareplattformen (x86, x86-64, Itanium, ARM) laufen: Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux und OS X. Die letzte Version 6.2 wurde am 10. Januar 2018 veröffentlicht. Skripte, die fĂŒr frĂŒhere Versionen geschrieben wurden, werden mit hoher Wahrscheinlichkeit auch in spĂ€teren Versionen funktionieren, jedoch können bei der RĂŒckwĂ€rtskompatibilitĂ€t Probleme auftreten, da PowerShell im Laufe der Jahre viele neue Cmdlets hinzugefĂŒgt hat. Die Version der auf dem Computer installierten Shell kann mit der Eigenschaft PSVersion der eingebauten Variablen $PSVersionTable ermittelt werden:

$PSVersionTable.PSVersion

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Man kann auch das Cmdlet verwenden:

Get-Variable -Name PSVersionTable –ValueOnly

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen
Das gleiche erfolgt auch mit dem Cmdlet Get-Host. TatsÀchlich gibt es viele Möglichkeiten, aber um diese zu nutzen, muss man die Programmiersprache PowerShell lernen, was wir im nÀchsten Artikel. 

Ergebnisse 

Microsoft hat es geschafft, eine wirklich leistungsstarke Shell mit einer benutzerfreundlichen integrierten Entwicklungsumgebung fĂŒr Skripte zu schaffen. Im Gegensatz zu den uns vertrauten Werkzeugen aus der Unix-Welt zeichnet sie sich durch eine tiefe Integration mit den Betriebssystemen der Windows-Familie sowie mit der Software fĂŒr diese und der .NET Core-Plattform aus. PowerShell kann als objektorientierte Shell bezeichnet werden, da Cmdlets und benutzerdefinierte Funktionen Objekte oder Objektarrays zurĂŒckgeben und diese als Eingabe erhalten können. Wir denken, dass alle Serveradministratoren unter Windows dieses Tool beherrschen sollten: Die Zeiten, in denen sie ohne die Befehlszeile auskamen, sind vorbei. Eine fortschrittliche Konsolenshell ist insbesondere auf unseren kostengĂŒnstigen VPS, die unter Windows Server Core laufen, besonders notwendig., aber das ist schon eine ganz andere Geschichte.

Was ist Windows PowerShell und wozu wird es verwendet? Teil 1: Hauptfunktionen

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte einloggen.

Welche Themen sollten in den nÀchsten Artikeln der Reihe zuerst angesprochen werden?

  • 53,2%Programmierung in PowerShell123

  • 42,4%Funktionen und Module in PowerShell98

  • 22,1%Wie unterschreibt man eigene Skripte?51

  • 12,1%Arbeiten mit Repositories ĂŒber Provider (providers)28

  • 57,6%Automatisierung der Computeradministration mit PowerShell133

  • 30,7%Verwaltung von Software und Integration ausfĂŒhrbarer PowerShell-Komponenten in Drittprodukte71

231 Nutzer haben abgestimmt. 37 Nutzer haben sich enthalten.

Quelle: habr.com

60GB SSD 8Gb DDR4