Historisch gesehen sind Befehlszeilen-Dienstprogramme auf Unix-Systemen besser entwickelt als auf Windows, aber mit der Einführung einer neuen Lösung hat sich die Situation geändert.
Mit Windows PowerShell können Systemadministratoren die meisten Routineaufgaben automatisieren. Damit können Sie Einstellungen ändern, Dienste stoppen und starten und auch Wartungsarbeiten an den meisten installierten Anwendungen durchführen. Es wäre falsch, das blaue Fenster als einen weiteren Befehlsinterpreter wahrzunehmen. Dieser Ansatz spiegelt nicht den Kern der von Microsoft vorgeschlagenen Innovationen wider. Tatsächlich sind die Möglichkeiten von Windows PowerShell viel umfassender: In einer kurzen Artikelserie werden wir versuchen herauszufinden, wie sich die Microsoft-Lösung von den uns bekannteren Tools unterscheidet.
Основные возможности
Natürlich ist Windows PowerShell in erster Linie eine Skript-Shell, die ursprünglich auf .NET Framework und später auf .NET Core aufbaute. Im Gegensatz zu Shells, die Textdaten akzeptieren und zurückgeben, arbeitet Windows PowerShell mit .NET-Klassen, die über Eigenschaften und Methoden verfügen. Mit PowerShell können Sie allgemeine Befehle ausführen und auf COM-, WMI- und ADSI-Objekte zugreifen. Es nutzt für den Zugriff verschiedene Speicher, etwa das Dateisystem oder die Windows-Registrierung, sogenannte. Anbieter. Erwähnenswert ist die Möglichkeit, ausführbare PowerShell-Komponenten in andere Anwendungen einzubetten, um verschiedene Vorgänge zu implementieren, einschließlich. über eine grafische Oberfläche. Auch das Gegenteil ist der Fall: Viele Windows-Anwendungen bieten über PowerShell Zugriff auf ihre Verwaltungsschnittstellen.
Mit Windows PowerShell können Sie:
- Betriebssystemeinstellungen ändern;
- Dienste und Prozesse verwalten;
- Serverrollen und -komponenten konfigurieren;
- 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
Windows PowerShell gibt es in zwei Formen: Neben dem Konsolenemulator mit Befehlsshell gibt es ein Integrated Scripting Environment (ISE). Um auf die Befehlszeilenschnittstelle zuzugreifen, wählen Sie einfach die entsprechende Verknüpfung aus dem Windows-Menü aus oder führen Sie powershell.exe aus dem Menü „Ausführen“ aus. Auf dem Bildschirm erscheint ein blaues Fenster, das sich in seinen Fähigkeiten deutlich von der vorsintflutlichen cmd.exe unterscheidet. Es gibt Autovervollständigung und andere Funktionen, die Benutzern von Befehlsshells für Unix-Systeme bekannt sind.
Um mit der Shell arbeiten zu können, müssen Sie sich einige Tastenkombinationen merken:
- Mit den Aufwärts- und Abwärtspfeilen scrollen Sie durch den Verlauf, um zuvor eingegebene Befehle zu wiederholen.
- Der rechte Pfeil am Ende einer Zeile gibt den vorherigen Befehl Zeichen für Zeichen erneut ein;
- Strg+PosXNUMX löscht den eingegebenen Text von der Cursorposition bis zum Zeilenanfang;
- Strg+Ende löscht Text vom Cursor bis zum Ende der Zeile.
F7 zeigt ein Fenster mit eingegebenen Befehlen an und ermöglicht die Auswahl eines davon. Die Konsole funktioniert auch mit Textauswahl mit der Maus, Kopieren-Einfügen, Cursorpositionierung, Löschen, Rücktaste – alles, was uns gefällt.
Windows PowerShell ISE ist eine vollständige Entwicklungsumgebung mit einem Code-Editor mit Registerkarten und Syntaxhervorhebung, Befehlsgenerator, integriertem Debugger und anderen Programmierfreuden. Wenn Sie im Entwicklungsumgebungseditor hinter den Befehlsnamen einen Bindestrich schreiben, erhalten Sie in der Dropdown-Liste alle verfügbaren Optionen mit Angabe des Typs. Sie können PowerShell ISE entweder über eine Verknüpfung im Systemmenü oder über die ausführbare Datei powershell_ise.exe starten.
Cmdlets
In Windows PowerShell ist die sogenannte. Cmdlets. Hierbei handelt es sich um spezialisierte .NET-Klassen, die eine Vielzahl von Funktionen bereitstellen. Sie heißen Action-Object (oder Verb-Noun, wenn Sie es vorziehen) und der durch Bindestrich getrennte Link ähnelt dem Prädikat und dem Subjekt in Sätzen in natürlicher Sprache. Get-Help bedeutet beispielsweise wörtlich „Get-Help“ oder in einem PowerShell-Kontext: „Show-Help“. Tatsächlich handelt es sich dabei um ein Analogon zum man-Befehl in Unix-Systemen, und 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 es ziemlich detailliert.
Zusätzlich zu „Get“ verwenden Cmdlets andere Verben, um Aktionen zu kennzeichnen (und streng genommen nicht nur Verben). In der folgenden Liste geben wir einige Beispiele:
Add
- hinzufügen;
Clear
- klar;
Enable
- anmachen;
Disable
- ausschalten;
New
- erstellen;
Remove
- löschen;
Set
- fragen;
Start
- laufen;
Stop
- stoppen;
Export
- Export;
Import
- importieren.
Es gibt System-, Benutzer- und optionale Cmdlets: Als Ergebnis der Ausführung geben sie 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, es ist jedoch nur dann obligatorisch, wenn mehrere Cmdlets in derselben Zeile ausgeführt werden.
Windows PowerShell-Cmdlets sind in Modulen gruppiert (NetTCPIP, Hyper-V usw.), und es gibt ein Get-Command-Cmdlet für die Suche nach Objekt und Aktion. Hilfe dazu können Sie sich wie folgt anzeigen lassen:
Get-Help Get-Command
Standardmäßig zeigt der Befehl eine kurze Hilfe an, Parameter (Argumente) werden jedoch nach Bedarf an Cmdlets übergeben. Mit ihrer Hilfe können Sie beispielsweise detaillierte (Parameter -Detailed) oder vollständige (Parameter -Full) Hilfe erhalten sowie Beispiele anzeigen (Parameter -Examples):
Get-Help Get-Command -Examples
Die Hilfe in Windows PowerShell wird durch das Cmdlet Update-Help aktualisiert. Wenn sich herausstellt, dass die Befehlszeile zu lang ist, können die Cmdlet-Argumente in die nächste verschoben werden, indem Sie das Dienstzeichen „`“ schreiben und die Eingabetaste drücken. Es wird nicht funktionieren, den Befehl einfach in einer Zeile fertig zu schreiben und in einer anderen fortzufahren.
Hier sind einige Beispiele für gängige Cmdlets:
Get-Process
- laufende Prozesse im System anzeigen;
Get-Service
— Dienste und deren Status anzeigen;
Get-Content
- Zeigt den Inhalt der Datei an.
Für häufig verwendete Cmdlets und externe Dienstprogramme verfügt Windows PowerShell über kurze Synonyme – Aliase (aus dem Englischen. Alias). Dir ist beispielsweise ein Alias für Get-ChildItem. Die Liste der Synonyme umfasst auch 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:
Skripte, Funktionen, Module und die PowerShell-Sprache
Windows PowerShell-Skripte werden als reine Textdateien mit der Erweiterung .ps1 gespeichert. Sie können sie nicht durch Doppelklick starten: Sie müssen mit der rechten Maustaste klicken, um das Kontextmenü aufzurufen, und den Eintrag „In PowerShell ausführen“ auswählen. Von der Konsole aus müssen Sie entweder den vollständigen Pfad zum Skript angeben oder in das entsprechende Verzeichnis gehen und den Dateinamen eingeben. Das Ausführen von Skripts ist auch durch Systemrichtlinien eingeschränkt. Um die aktuellen Einstellungen zu überprüfen, können Sie das Cmdlet Get-ExecutionPolicy verwenden, das einen der folgenden Werte zurückgibt:
Restricted
— Das Starten von Skripten ist deaktiviert (standardmäßig);
AllSigned
- Es ist nur der Start von Skripten erlaubt, die von einem vertrauenswürdigen Entwickler signiert wurden.
RemoteSigned
- darf signierte und eigene Skripte ausführen;
Unrestricted
- darf beliebige Skripte ausführen.
Der Administrator hat zwei Möglichkeiten. Am sichersten ist es, Skripte zu signieren, aber das ist eine ziemlich ernste Zauberei – wir werden uns in zukünftigen Artikeln damit befassen. Gehen wir nun den Weg des geringsten Widerstands und ändern wir die Politik:
Set-ExecutionPolicy RemoteSigned
Dazu muss PowerShell als Administrator ausgeführt werden. Sie können die Richtlinie für den aktuellen Benutzer jedoch mit einer speziellen Einstellung ändern.
Skripte werden in einer objektorientierten Programmiersprache geschrieben, deren Befehle nach dem gleichen Prinzip benannt werden wie die zuvor besprochenen Cmdlets: „Action-Object“ („Verb-Noun“). Ihr Hauptzweck besteht darin, Verwaltungsaufgaben zu automatisieren, es handelt sich jedoch um eine vollwertige interpretierte Sprache, die über alle erforderlichen Konstrukte verfügt: bedingter Sprung, Schleifen, Variablen, Arrays, Objekte, Fehlerbehandlung usw. Für die Skripterstellung eignet sich jeder Texteditor, am besten ist jedoch die Ausführung von Windows PowerShell ISE.
Sie können Parameter an das Skript übergeben, sie als erforderlich festlegen und Standardwerte festlegen. Darüber hinaus können Sie mit Windows PowerShell Funktionen auf die gleiche Weise wie Cmdlets erstellen und aufrufen, indem Sie das Funktionskonstrukt und geschweifte Klammern verwenden. Ein Skript mit Funktionen wird als Modul bezeichnet und hat die Erweiterung .psm1. Module müssen in Verzeichnissen gespeichert werden, die in den 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 Konstrukt verwendet, das Unix-Shell-Benutzern bekannt ist. In Windows PowerShell können Sie mit der vertikalen Leiste auch die Ausgabe eines Befehls an die Eingabe eines anderen Befehls übergeben. Es gibt jedoch einen wesentlichen Unterschied in der Implementierung der Pipeline: Wir sprechen nicht mehr über eine Reihe von Zeichen oder etwas Ähnliches Text. Integrierte Cmdlets oder benutzerdefinierte Funktionen geben Objekte oder Arrays von Objekten zurück und können diese auch als Eingabe empfangen. Wie die Bourne-Shell und ihre vielen Nachfolger erleichtert PowerShell komplexe Aufgaben mit einer Pipeline.
Das einfachste Pipeline-Beispiel sieht so aus:
Get-Service | Sort-Object -property Status
Zuerst wird das Cmdlet „Get-Service“ ausgeführt, und dann werden alle von ihm empfangenen Dienste an das Cmdlet „Sort-Object“ übergeben, um sie nach der Eigenschaft „Status“ zu sortieren. An welches Argument das Ergebnis des vorherigen Abschnitts der Pipeline übergeben wird, hängt von seinem Typ ab – normalerweise ist es InputObject. Dieses Problem wird in einem Artikel über die Programmiersprache PowerShell ausführlicher behandelt.
Wenn Sie möchten, können Sie die Kette fortsetzen und das Ergebnis der Sort-Object-Operation an ein anderes Cmdlet übergeben (dieses wird von links nach rechts ausgeführt). Übrigens steht auch Windows-Nutzern die von allen Unixoiden bekannte Konstruktion für die Paginierung zur Verfügung:
Get-Service | Sort-Object -property Status | more
Ausführen von Aufgaben im Hintergrund
Sehr oft ist es notwendig, einen bestimmten Befehl im Hintergrund auszuführen, um nicht auf das Ergebnis seiner Ausführung in der Shell-Sitzung warten zu müssen. Windows PowerShell verfügt für diesen Fall über mehrere Cmdlets:
Start-Job
- Starten einer Hintergrundaufgabe;
Stop-Job
— Stoppen Sie die Hintergrundaufgabe;
Get-Job
— Liste der Hintergrundaufgaben anzeigen;
Receive-Job
— Anzeigen des Ergebnisses der Ausführung der Hintergrundaufgabe;
Remove-Job
— Löschen einer Hintergrundaufgabe;
Wait-Job
- Übertragen der Hintergrundaufgabe zurück auf die Konsole.
Um eine Hintergrundaufgabe zu starten, verwenden wir das Cmdlet „Start-Job“ und geben einen Befehl oder eine Reihe von Befehlen in geschweiften Klammern an:
Start-Job {Get-Service}
Hintergrundaufgaben in Windows PowerShell können manipuliert werden, indem man ihre Namen kennt. Lassen Sie uns zunächst lernen, wie man sie anzeigt:
Get-Job
Nun zeigen wir das Ergebnis des Jobs Job1:
Receive-Job Job1 | more
Alles ist ziemlich einfach.
Remote-Befehlsausführung
Mit Windows PowerShell können Sie Befehle und Skripte nicht nur auf dem lokalen Computer, sondern auch auf einem Remotecomputer und sogar auf einer ganzen Gruppe von Computern ausführen. Dafür gibt es mehrere Möglichkeiten:
- Viele Cmdlets verfügen über einen Parameter
-ComputerName
, aber auf diese Weise lässt sich beispielsweise kein Förderband erstellen; - Cmdlet
Enter-PSSession
ermöglicht Ihnen, eine interaktive Sitzung auf einem Remote-Computer zu erstellen; - Verwenden des Cmdlets
Invoke-Command
Sie können Befehle oder Skripte auf einem oder mehreren Remotecomputern ausführen.
Versionen von PowerShell
PowerShell hat sich seit seiner ersten Veröffentlichung im Jahr 2006 stark verändert. Das Tool ist für viele Systeme verfügbar, die auf unterschiedlichen 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. Neueste Version 6.2 veröffentlicht am 10. Januar 2018. Skripte, die für frühere Versionen geschrieben wurden, funktionieren wahrscheinlich auch in späteren Versionen, aber die Rückportierung kann problematisch sein, da PowerShell im Laufe der Jahre der Entwicklung eine große Anzahl neuer Cmdlets eingeführt hat. Sie können die Version der auf dem Computer installierten Befehlsshell mithilfe der PSVersion-Eigenschaft der integrierten Variablen $PSVersionTable ermitteln:
$PSVersionTable.PSVersion
Sie können auch das Cmdlet verwenden:
Get-Variable -Name PSVersionTable –ValueOnly
Dasselbe geschieht mit dem Cmdlet Get-Host. Tatsächlich gibt es viele Möglichkeiten, aber um sie nutzen zu können, müssen Sie die Programmiersprache PowerShell erlernen, was wir in tun werden
Ergebnisse
Microsoft ist es gelungen, eine wirklich leistungsstarke Shell mit einer praktischen integrierten Umgebung zum Entwickeln von Skripten zu erstellen. Es unterscheidet sich von den uns aus der Unix-Welt bekannten Tools durch die tiefe Integration mit Betriebssystemen der Windows-Familie sowie mit Software für diese und der .NET Core-Plattform. PowerShell kann als objektorientierte Shell bezeichnet werden, da Cmdlets und benutzerdefinierte Funktionen Objekte oder Arrays von Objekten zurückgeben und diese als Eingabe verwenden können. Wir sind der Meinung, dass alle Serveradministratoren unter Windows dieses Tool besitzen sollten: Die Zeit ist vorbei, in der sie auf die Befehlszeile verzichten konnten. Insbesondere wird eine erweiterte Konsolen-Shell benötigt
An der Umfrage können nur registrierte Benutzer teilnehmen.
Welche Themen sollten in den nächsten Artikeln der Serie zuerst behandelt werden?
-
53,2%Programmierung in PowerShell123
-
42,4%PowerShell98-Funktionen und -Module
-
22,1%Wie signiere ich meine eigenen Skripte?51
-
12,1%Arbeiten mit Repositories über Anbieter (Anbieter)28
-
57,6%Automatisierung der Computerverwaltung mit PowerShell133
-
30,7%Softwareverwaltung und Einbettung ausführbarer PowerShell-Dateien in Produkte von Drittanbietern71
231 Benutzer haben abgestimmt. 37 Benutzer enthielten sich der Stimme.
Source: habr.com