Was ist Windows PowerShell und was isst es? Teil 1: Hauptmerkmale

In der Vergangenheit wurden Befehlszeilenprogramme auf Unix-Systemen besser entwickelt als unter Windows. Mit dem Aufkommen einer neuen Lösung haben sich die Dinge jedoch geändert.

Mit Windows PowerShell können Systemadministratoren die meisten Routineaufgaben automatisieren. Mit seiner Hilfe können Sie Einstellungen ändern, Dienste stoppen und starten sowie die meisten installierten Anwendungen warten. Es wäre falsch, das blaue Fenster als einen anderen Befehlsinterpreter wahrzunehmen. Dieser Ansatz spiegelt nicht das Wesentliche der von Microsoft vorgeschlagenen Innovationen wider. Tatsächlich sind die Möglichkeiten von Windows PowerShell viel größer: In einer kurzen Artikelserie werden wir versuchen herauszufinden, wie sich die Microsoft-Lösung von den bekannteren Tools unterscheidet.



Hauptmerkmale 


Natürlich ist Windows PowerShell in erster Linie eine Befehlsshell mit einer Skriptsprache, die ursprünglich auf der Basis von .NET Framework und später von .NET Core erstellt wurde. Im Gegensatz zu Shells, die Textdaten akzeptieren und zurückgeben, arbeitet Windows PowerShell mit .NET-Klassen mit Eigenschaften und Methoden. Mit PowerShell können Sie normale Befehle ausführen und auf COM-, WMI- und ADSI-Objekte zugreifen. Es verwendet verschiedene Repositorys, wie das Dateisystem oder die Windows-Registrierung, für den Zugriff auf die sogenannten Lieferanten (Anbieter). Es ist erwähnenswert, dass ausführbare PowerShell-Komponenten in andere Anwendungen eingebettet werden können, um verschiedene Vorgänge zu implementieren, einschließlich über die grafische Oberfläche. Das Gegenteil ist auch der Fall: Viele Windows-Anwendungen bieten über PowerShell Zugriff auf ihre Verwaltungsoberflächen. 

Mit Windows PowerShell können Sie:

  • Ändern Sie die Betriebssystemeinstellungen.
  • Services und Prozesse verwalten;
  • Konfigurieren Sie Serverrollen und -komponenten.
  • Software installieren
  • Verwalten Sie installierte Software über spezielle Schnittstellen.
  • Einbetten ausführbarer Komponenten in Programme von Drittanbietern;
  • Erstellen Sie Skripte, um Verwaltungsaufgaben zu automatisieren.
  • Arbeiten Sie mit dem Dateisystem, der Windows-Registrierung, dem Zertifikatspeicher usw.

Shell und Entwicklungsumgebung


Es gibt Windows PowerShell auf zwei Arten: Zusätzlich zum Konsolenemulator mit einer Befehlsshell gibt es eine integrierte Skriptumgebung (ISE). Um auf die Befehlszeilenschnittstelle zuzugreifen, wählen Sie einfach die entsprechende Verknüpfung im Windows-Menü oder führen Sie Powershell.exe im Menü Ausführen aus. Auf dem Bildschirm wird ein blaues Fenster angezeigt, dessen Funktionen sich erheblich von denen der antidiluvianischen cmd.exe unterscheiden. Es gibt Autovervollständigung und andere Funktionen, die Benutzern von Befehlsshells für Unix-Systeme vertraut sind.



Um mit der Shell arbeiten zu können, müssen Sie sich einige Tastenkombinationen merken:

  • Aufwärts- und Abwärtspfeile blättern durch den Verlauf, um zuvor eingegebene Befehle zu wiederholen.
  • Der Rechtspfeil am Ende der Zeile gibt den vorherigen Befehl zeichenweise wieder.
  • Strg + Home löscht den eingegebenen Text von der Cursorposition bis zum Zeilenanfang.
  • Strg + Ende löscht den Text vom Cursor bis zum Ende der Zeile.

F7 zeigt ein Fenster mit den eingegebenen Befehlen an und ermöglicht die Auswahl eines dieser Befehle. Die Mausauswahl, das Kopieren und Einfügen, die Cursorpositionierung, das Löschen und die Rücktaste funktionieren auch in der Konsole - alles wie wir möchten.


Windows PowerShell ISE ist eine vollwertige Entwicklungsumgebung, die Registerkarten und Syntaxhervorhebungen mit einem Code-Editor, einem Befehlsdesigner, einem integrierten Debugger und anderen Programmierfreuden unterstützt. Wenn Sie nach dem Befehlsnamen einen Bindestrich in den Entwicklungsumgebungseditor schreiben, erhalten Sie alle verfügbaren Parameter mit einem Typ in der Dropdown-Liste. Sie können PowerShell ISE entweder über eine Verknüpfung im Systemmenü oder mithilfe der ausführbaren Datei "Powershell_ise.exe" starten.


Cmdlets 


In Windows PowerShell wird das sogenannte Cmdlets Dies sind spezialisierte .NET-Klassen, die verschiedene Funktionen enthalten. Sie werden nach dem Prinzip "Aktionsobjekt" (oder "Verb-Nomen, wenn Sie es mehr mögen) benannt, und ein durch Bindestriche getrennter Konnektiv ähnelt dem Prädikat und dem Subjekt in Sätzen natürlicher Sprachen. Get-Help bedeutet beispielsweise wörtlich "Get-Help" oder im Kontext von PowerShell "Show-Help". Tatsächlich ist dies ein Analogon zum Befehl man in Unix-Systemen, und die Handbücher in PowerShell müssen auf diese Weise angefordert werden, und nicht durch Aufrufen von Cmdlets mit der Taste --help oder /?. Vergessen Sie nicht die Online-PowerShell-Dokumentation: Microsoft hat sie recht detailliert.

Zusätzlich zu Get werden in Cmdlets andere Verben (und streng genommen nicht nur Verben) verwendet, um Aktionen anzuzeigen. In der folgenden Liste geben wir einige Beispiele:

Add- hinzufügen;
Clear- sauber;
Enable- aktivieren;
Disable- ausschalten;
New- erstellen;
Remove- löschen;
Set- Fragen;
Start- Lauf;
Stop- halt;
Export- Export;
Import- importieren.

Es gibt System-, Benutzer- und optionale Cmdlets: Als Ergebnis der Ausführung geben alle ein Objekt oder ein Array von Objekten zurück. Sie unterscheiden nicht zwischen Groß- und Kleinschreibung, d.h. Aus Sicht des Befehlsinterpreters gibt es keinen Unterschied zwischen Get-Help und get-help. Das Zeichen ';' wird zur Trennung verwendet, muss jedoch nur festgelegt werden, wenn mehrere Cmdlets in derselben Zeile ausgeführt werden. 

Windows PowerShell-Cmdlets sind in Module (NetTCPIP, Hyper-V usw.) gruppiert, und das Cmdlet Get-Command ist für die Suche nach Objekt und Aktion vorhanden. Sie können Hilfe dazu wie folgt zeigen:

Get-Help Get-Command



Standardmäßig zeigt der Befehl eine kurze Hilfe an. Bei Bedarf werden jedoch Parameter (Argumente) an die Cmdlets übergeben. Mit ihnen können Sie beispielsweise eine detaillierte Hilfe (-Detailed Parameter) oder eine vollständige Hilfe (-Full Parameter) sowie Anzeigebeispiele (-Examples Parameter) erhalten:

Get-Help Get-Command -Examples

Die Hilfe in Windows PowerShell wird mit dem Cmdlet Update-Help aktualisiert. Wenn die Befehlszeile zu lang ist, können die Argumente des Cmdlets zum nächsten übertragen werden, indem Sie das Dienstzeichen "" eingeben und die Eingabetaste drücken. Schreiben Sie den Befehl einfach in einer Zeile und fahren Sie in einer anderen fort.

Im Folgenden finden Sie einige Beispiele für gängige Cmdlets: 

Get-Process- Zeigen Sie laufende Prozesse im System an.
Get-Service- Dienste und ihren Status anzeigen;
Get-Content- Zeigen Sie den Inhalt der Datei an.

Für häufig verwendete Cmdlets und externe Dienstprogramme in Windows PowerShell gibt es kurze Synonyme - Aliase (aus dem englischen Alias). Beispielsweise ist dir ein Alias ​​von Get-ChildItem. Die Liste der Synonyme enthält Analoga von Befehlen aus Unix-Systemen (ls, ps usw.), und das Cmdlet Get-Help wird vom Befehl help aufgerufen. Eine vollständige Liste der Synonyme kann mit dem Cmdlet Get-Alias ​​angezeigt werden:


PowerShell-Skripte, -Funktionen, -Module und -Sprache


Windows PowerShell-Skripts werden als Nur-Text-Dateien mit der Erweiterung .ps1 gespeichert. Sie können sie nicht mit einem Doppelklick starten: Sie müssen mit der rechten Maustaste auf das Kontextmenü klicken und das Element "In PowerShell ausführen" auswählen. Über die Konsole müssen Sie entweder den vollständigen Pfad zum Skript angeben oder in das entsprechende Verzeichnis gehen und den Dateinamen schreiben. Das Ausführen von Skripten wird auch durch die Systemrichtlinie eingeschränkt. Um die aktuellen Einstellungen zu überprüfen, können Sie das Cmdlet Get-ExecutionPolicy verwenden, das einen der folgenden Werte angibt:

Restricted- Die Skriptausführung ist (standardmäßig) verboten.
AllSigned- Nur das Starten von Skripten, die von einem vertrauenswürdigen Entwickler signiert wurden, ist zulässig.
RemoteSigned- darf signierte und benutzerdefinierte Skripte ausführen;
Unrestricted- darf alle Skripte ausführen.

Der Administrator hat zwei Möglichkeiten. Am sichersten ist das Signieren von Skripten, aber dies ist eine ziemlich ernsthafte Zauberei - wir werden uns in den folgenden Artikeln damit befassen. Jetzt werden wir den Weg des geringsten Widerstands beschreiten und die Politik ändern:

Set-ExecutionPolicy RemoteSigned


Dazu muss PowerShell als Administrator ausgeführt werden. Mit einem speziellen Parameter können Sie jedoch die Richtlinie für den aktuellen Benutzer ändern.

Skripte werden in einer objektorientierten Programmiersprache geschrieben, deren Befehle nach dem gleichen Prinzip wie die zuvor diskutierten Cmdlets benannt sind: "Action-Object" ("Verb-Noun"). Sein Hauptzweck ist die Automatisierung von Verwaltungsaufgaben, aber es ist eine voll interpretierte Sprache, die alle notwendigen Konstruktionen aufweist: bedingte Verzweigung, Schleifen, Variablen, Arrays, Objekte, Fehlerbehandlung usw. Jeder Texteditor eignet sich zum Schreiben von Skripten. Am bequemsten ist es jedoch, Windows PowerShell ISE zu starten.

Sie können Parameter an das Skript übergeben, obligatorisch machen und Standardwerte festlegen. Darüber hinaus können Sie mit Windows PowerShell Funktionen erstellen und auf dieselbe Weise wie Cmdlets aufrufen. Dazu verwenden Sie das Funktionskonstrukt und geschweifte Klammern. Ein Skript mit Funktionen wird als Modul bezeichnet und hat die Erweiterung .psm1. Module müssen in Verzeichnissen gespeichert werden, die in PowerShell-Umgebungsvariablen definiert sind. Sie können sie mit dem folgenden Befehl anzeigen:

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

Förderer


Im letzten Beispiel haben wir ein Design verwendet, das Benutzern von Shells für Unix-Systeme vertraut ist. In Windows PowerShell können Sie mit der vertikalen Leiste auch die Ausgabe eines Befehls auf die Eingabe eines anderen Befehls übertragen. Bei der Implementierung der Pipeline gibt es jedoch einen signifikanten Unterschied: Hierbei handelt es sich nicht um einen Zeichensatz oder einen Text. Integrierte Cmdlets oder benutzerdefinierte Funktionen geben Objekte oder Arrays von Objekten zurück und können sie auch an der Eingabe empfangen. Wie die Bourne-Shell und ihre vielen Follower vereinfacht PowerShell komplexe Aufgaben mit einer Pipeline.

Das einfachste Beispiel für eine Pipeline sieht folgendermaßen aus:

Get-Service | Sort-Object -property Status


Zuerst wird das Cmdlet Get-Service ausgeführt, und dann werden alle empfangenen Services zur Sortierung nach der Eigenschaft Status an das Cmdlet Sort-Object übergeben. An welches Argument das Ergebnis des vorherigen Abschnitts der Pipeline übergeben wird, hängt von seinem Typ ab - normalerweise ist dies ein InputObject. Dieses Problem wird in dem Artikel zur Programmiersprache PowerShell ausführlicher behandelt. 

Wenn Sie möchten, können Sie die Kette fortsetzen und das Ergebnis von Sort-Object an ein anderes Cmdlet übergeben (diese werden von links nach rechts ausgeführt). Das Windows-vertraute Design für die Paging-Ausgabe ist übrigens auch für alle Unixoids verfügbar: 

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

Ausführen von Aufgaben im Hintergrund 


Sehr oft müssen Sie einen bestimmten Befehl im Hintergrund ausführen, um nicht auf das Ergebnis seiner Ausführung in einer Shell-Sitzung zu warten. In Windows PowerShell gibt es für diesen Fall mehrere Cmdlets:

Start-Job- Starten einer Hintergrundaufgabe;
Stop-Job- die Hintergrundaufgabe stoppen;
Get-Job- Eine Liste der Hintergrundaufgaben anzeigen;
Receive-Job- das Ergebnis der Hintergrundaufgabe anzeigen;
Remove-Job- Entfernen der Hintergrundaufgabe;
Wait-Job- Übertragen Sie die Hintergrundaufgabe zurück auf die Konsole.

Um eine Hintergrundaufgabe zu starten, verwenden wir das Cmdlet Start-Job und geben in geschweiften Klammern einen Befehl oder eine Reihe von Befehlen an:

Start-Job {Get-Service}


Hintergrundaufgaben in Windows PowerShell können durch Kenntnis ihrer Namen bearbeitet werden. Erfahren Sie zunächst, wie Sie sie anzeigen:

Get-Job


Jetzt zeigen wir das Ergebnis von Job1:

Receive-Job Job1 | more


Es ist ziemlich einfach.

Remote-Befehlsausführung


Mit Windows PowerShell können Sie Befehle und Skripts nicht nur auf dem lokalen, sondern auch auf dem Remotecomputer und sogar auf einer ganzen Gruppe von Computern ausführen. Es gibt verschiedene Möglichkeiten, dies zu tun:

  • Viele Cmdlets haben einen Parameter -ComputerName, aber auf diese Weise schlägt beispielsweise das Erstellen einer Pipeline fehl.
  • Mit dem Cmdlet Enter-PSSessionkönnen Sie eine interaktive Sitzung auf einem Remotecomputer erstellen. 
  • Mit dem Cmdlet können Invoke-CommandSie Befehle oder Skripte auf einem oder mehreren Remotecomputern ausführen.

PowerShell-Versionen


Seit seiner ersten Veröffentlichung im Jahr 2006 hat sich PowerShell stark verändert. Das Tool ist für viele Systeme verfügbar, die auf verschiedenen Hardwareplattformen (x86, x86-64, Itanium, ARM) ausgeführt werden: 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 neueste Version 6.2 wurde am 10. Januar 2018 veröffentlicht. Für frühere Versionen geschriebene Skripte funktionieren eher in späteren Versionen, es kann jedoch zu Problemen bei der umgekehrten Portierung kommen, da im Laufe der Entwicklungsjahre eine große Anzahl neuer Cmdlets in PowerShell angezeigt wurde. Sie können die auf dem Computer installierte Version der Shell mithilfe der PSVersion-Eigenschaft der integrierten Variablen $ PSVersionTable ermitteln:

$PSVersionTable.PSVersion


Sie können auch das Cmdlet verwenden:

Get-Variable -Name PSVersionTable –ValueOnly


Das gleiche gilt für das Cmdlet Get-Host. Tatsächlich gibt es viele Optionen, aber um sie zu verwenden, müssen Sie die PowerShell-Programmiersprache lernen. Dies werden wir im nächsten Artikel tun

Zusammenfassung 


Microsoft hat es geschafft, eine wirklich leistungsstarke Befehlsshell mit einer praktischen integrierten Umgebung für die Entwicklung von Skripten zu erstellen. Es unterscheidet sich von den uns in der Unix-Welt bekannten Mitteln durch die tiefe Integration in Windows-Betriebssysteme sowie deren Software und die .NET Core-Plattform. PowerShell kann als objektorientierte Shell bezeichnet werden, da Cmdlets und benutzerdefinierte Funktionen Objekte oder Arrays von Objekten zurückgeben und diese bei der Eingabe empfangen können. Wir sind der Meinung, dass alle Windows Server-Administratoren dieses Tool besitzen sollten: Die Zeit ist vergangen, in der sie auf die Befehlszeile verzichten konnten. Eine erweiterte Konsolen-Shell wird insbesondere auf unserem kostengünstigen VPS mit Windows Server Core benötigt , aber das ist eine andere Geschichte.

2: Windows PowerShell
3: ,
4: ,

Source: https://habr.com/ru/post/undefined/


All Articles