PowerShell ist eine interaktive Shell- und Skriptsprache von Microsoft, die überarbeitet, worum es bei einer Befehls-Shell geht. Es hat sehr interessante Fähigkeiten über die bekannten Unix-Shells hinaus, und es gibt ein starkes Ökosystem und eine Gemeinschaft.
In diesem zweiteiligen Lernprogramm erfahren Sie mehr über die coolen Dinge, die Sie mit PowerShell machen können, die Geschichte, die Architektur, die Konzepte und den Vergleich mit einer Unix-Shell wie Bash. Machen Sie sich bereit für eine aufregende Reise!
Wenn Sie mit Windows 10 arbeiten, können Sie loslegen. Andernfalls laden Sie es von der Microsoft-Website herunter.
Nach der Installation von PowerShell möchten Sie zunächst die Skriptausführung aktivieren. Starten Sie PowerShell als Administrator und geben Sie Folgendes ein: Set-ExecutionPolicy RemoteSigned
. Sie müssen es nur einmal tun. Aktualisieren Sie nun die Hilfedateien: Update-Hilfe -Force
.
Beginnen wir mit einer kurzen Demonstration der Breite und Tiefe von PowerShell. Dies ist nur eine etwas willkürliche Liste, um Ihren Appetit anzuregen. Es ist nicht umfassend und auch nicht unbedingt das beeindruckendste, was Sie mit PowerShell tun können.
Hier ist ein cooler One-Liner zum Abspielen von Videodateien (oder beliebigen Mediendateien):
(Neues Objekt -COM WMPlayer.OCX) .openPlayer ("Pfad zu Ihrem Video")
Es öffnet sich ein Media Player-Fenster und die Wiedergabe Ihres Videos wird sofort gestartet.
PowerShell bietet eine der lesbarsten und optisch ansprechendsten Lösungen für mehrzeilige Zeichenketten, auch hier "Zeichenketten" genannt. Beginnen Sie einfach mit @ "
und enden mit "@
. Beachten Sie, dass sich die Start- und Endmarkierungen in einer eigenen Zeile befinden müssen, getrennt vom Inhalt dazwischen. Hier ist ein Beispiel:
$ x = "@ 123 456 789 @"
Wählen Sie eine Zufallszahl zwischen 1 und 100:
1… 50 | Get-Random
Dies ist eine einfache Pipeline. Auf der linken Seite können alle Zahlen von 1 bis einschließlich 50 generiert werden. Anschließend werden sie dem Cmdlet "Get-Random" zugeführt, von dem eine von ihnen ausgewählt wird.
PowerShell unterstützt die Zwischenablage ausführlich. Sie können Objekte verschiedener Formate erhalten und einstellen. Natürlich ist einfacher Text möglich, Sie können jedoch auch mit Bildern, HTML, RTF und sogar Dateien arbeiten.
Hier wähle ich einige Dateien im Explorer aus und erhalte sie aus der Zwischenablage in PowerShell:
23:43:05 C: \ Users \ the_g> Get-Clipboard -Files-Modus LastWriteTime Länge Name ---- ------------- ------ ---- -a ---- 15.09.2016 11:41 PM 135890 Capture.PNG -a ---- 16.09.2016 22:09 PM 3179548 20160917_110605.jpg -a ---- 16.09.2016 10:09 PM 4623977 20160917_110734.jpg
PowerShell kann auch sprechen!
Add-Type -AssemblyName System.speech $ synth = New-Object -TypName System.Speech.Synthesis.SpeechSynthesizer $ synth.Speak ("PowerShell für die Benutzer")
Hier ist eine kleine Pipeline, um alle laufenden virtuellen Maschinen aufzulisten:
Get-VM | Where-Object $ _. State -eq "Running"
PowerShell kann während langer Vorgänge einen schönen Fortschrittsbalken anzeigen. Hier ein Beispiel, das die Gesamtgröße aller Dateien im aktuellen Verzeichnis rekursiv berechnet:
$ files = Get-ChildItem. -Recurse $ total = 0 For ($ i = 1; $ i -le $ files.Count-1; $ i ++) Write-Progress -Activity "Berechnung der Gesamtgröße…" -status $ files [$ i] .Name - PercentComplete ($ i / $ files.Count * 100) $ total + = $ files [$ i] .Lange Start-Sleep -Milliseconds 50 Write-Host "Gesamtgröße: $ ($ total / 1MB)"
PowerShell 1.0 wurde 2006 veröffentlicht, aber der Erfinder Jeffery Snover begann schon viel früher damit zu arbeiten. Schauen Sie sich das Manifest von 2002 an. PowerShell hat einen langen Weg zurückgelegt. Bei den Kommandozeilen war Windows weit zurückgeblieben. Systemadministratoren und Power-User mussten sich mit den mageren Angeboten von cmd.exe und Batch-Dateien zufrieden geben. Es gab einige schwache Versuche, die Situationen mit Windows-Scripting-Hosts zu verbessern, die das Scripting von Systemobjekten mit VBScript oder JScript ermöglichten, aber bei diesem Ansatz gab es viele Probleme.
PowerShell hat das alles sehr schnell geändert. Es entsprach nicht nur den Befehlszeilenfunktionen von * nix-Umgebungen, sondern war auch mit vielen Neuerungen, beispielloser Konsistenz und Benutzerfreundlichkeit vorangekommen.
Heute ist PowerShell auf Version 5.1. Im Laufe der Jahre und Versionen wurden die Fähigkeiten und Hosting-Umgebungen von PowerShell erheblich erweitert.
PowerShell 1.0 unterstützte lokale Verwaltung von Windows-Computern (einschließlich Windows Server 2003).
PowerShell 2.0 wurde in Windows 7 und Windows Server 2008 R2 integriert. Es wurde Unterstützung für Remoting hinzugefügt und die Funktionen von PowerShell mit Hintergrundjobs, Transaktionen, Ereignissen, Debugging, einer GUI-Entwicklungsumgebung und vielen neuen Cmdlets wurden erheblich erweitert.
PowerShell 3.0 wurde als Teil des Windows-Verwaltungsframeworks veröffentlicht. Es wurde unter Windows 8 und Windows Server 2012 installiert. Es wurden geplante Jobs, Sitzungskonnektivität, automatisches Laden von Modulen und viele neue Befehle hinzugefügt.
PowerShell 4.0 wurde in Windows 8.1 und Windows Server 2012 R2 integriert. Es wurde die Unterstützung für die Konfiguration des gewünschten Status, das erweiterte Debugging, die Netzwerkdiagnose und die Unterstützung für das Netzwerk hinzugefügt -PipelineVariable
Schalter.
PowerShell 5.0 wurde im Rahmen des Windows Management Framework 5 veröffentlicht. PowerShell 5.1 wurde im Rahmen der Jubiläumsaktualisierungen für Windows 10 veröffentlicht. Zu den neuen Funktionen gehören PowerShell-Klassendefinitionen, .NET-Enumerationen, Remote-Debugging und Debugging von Hintergrundjobs, lokaler DSC-Konfigurationsmanager und viele weitere DSC-Verbesserungen.
PowerShell ist eine sehr leistungsfähige Programmiersprache. Natürlich können auch Skripts ausgeführt werden, es verfügt jedoch auch über erweiterte Mechanismen wie Module, benutzerdefinierte Cmdlets und Klassen. PowerShell ist eine Multi-Paradigmasprache, die objektorientierte, funktionale und prozedurale Paradigmen unterstützt.
Der vielleicht wichtigste Aspekt von PowerShell ist jedoch, dass es sich um eine vollwertige .NET-Sprache handelt. Es erstellt und verwendet .NET-Assembly-Objekte, die in einer beliebigen Sprache programmiert sind, und Objekte, die die PowerShell-Pipeline durchlaufen, sind .NET-Objekte. PowerShell ist auch stark typisiert, aber wenn es bequem ist, können Sie es ignorieren, und Sie müssen nicht die Typen angeben, wenn Sie dies nicht möchten.
Um prozedural programmieren zu können, benötigen Sie Funktionen, Bedingungen und Schleifen. PowerShell bietet alles. Die Vergleichsoperatoren können Sie überraschen, da sie die typischen Symbole nicht verwenden. Stattdessen hast du: -Gl
(gleich), -Es ist
(weniger als), -gt
(größer als), -ge
(größer oder gleich) usw.
Hier ist ein Beispiel für eine bedingte Logik, das Eingaben vom Benutzer erhält und deren Gültigkeit überprüft. Beachten Sie die Verwendung der -wie
Operator, um zu versuchen, die Eingabe in eine Ganzzahl zu konvertieren. Wenn dies fehlschlägt, ist das Ergebnis $ null
.
$ value = 44 $ in = Read-Host "Errate eine Zahl zwischen 1 und 100" $ guess = $ in -as [int] if ((($ guess -eq $ null) -oder ($ guess -lt 1)) -oder ($ guess -gt 100)) Write-Host "$ rate ist NICHT eine ganze Zahl zwischen 1 und 100" Exit if ($ guess -eq $ value) Write-Host "Sie gewinnen!" elseif ($ guess -lt $ value) Write-Host "zu niedrig" else Write-Host "zu hoch"
In PowerShell gibt es viele Möglichkeiten und Cmdlets, um mit Kollektionen zu arbeiten und sie zu schneiden und zu würfeln, sodass Schleifen häufig nicht benötigt werden. Nur für den Fall, dass Sie so geneigt sind, gibt es in PowerShell viele unregelmäßige Konstrukte. Sie können For-Schleifen, ForEach-Schleifen, While-Schleifen, Do-While-Schleifen und sogar spezielle ForEach-Object-Schleifen verwenden. Hier sind einige Beispiele.
Für ($ i = 0; $ i -lt 100; $ i + = 20) $ i 0 20 40 60 80 $ $ list = 1… 5 ForEach ($ item in $ list) $ item * 3 3 6 9 12 15 $ später = $ (Get-Date) .AddSeconds (5) while ($ (Get-Date) -lt $ später) "Sind wir schon da?" sleep 1 PS C: \ WINDOWS \ system32> $ later = $ (Get-Date) .AddSeconds (5) while ($ (Get-Date) -lt $ später) "Sind wir schon da?" sleep 1 Sind wir schon da? Sind wir schon da? Sind wir schon da? Sind wir schon da? Sind wir schon da?
In PowerShell dreht sich alles um funktionale Programmierung. Die Pipeline ist eine funktionale Ausführungsumgebung, in der Sie Funktionen / Cmdlets dynamisch zusammenstellen. Sie können dies interaktiv oder in einem Skript tun. Wenn Sie explizite Funktionsprogrammierung durchführen möchten, können Sie dies auch tun, aber die Syntax ist etwas umständlich. Sehen Sie sich diesen Artikel an: Funktionale Programmierung in PowerShell.
Sie haben bereits gesehen, wie Sie .NET-Objekte und Objekte verwenden, die durch die Pipeline gehen. Definieren Sie eine Klasse in PowerShell und führen Sie einige grundlegende OOs aus. Ich erstelle hier eine Klasse für eine Spielfigur mit Gesundheit und Rüstung, die Schaden erleiden und ihre Gesundheit berechnen kann. Es gibt auch eine Ist am Leben()
Methode, die prüft, ob "health"> 0 ist.
Beachten Sie, dass Sie PowerShell-Klassen mit instanziieren müssen [
. Die New-Object-Syntax wird ab PowerShell 5.1 nicht unterstützt.
class Character [string] $ Name [int] $ health [int] $ AttackDamage [float] $ Armor Zeichen ([string] $ name, [int] $ health, [int] $ attackDamage, [float] $ armor) $ this.Name = $ name $ this.Health = $ health $ this.AttackDamage = $ attackDamage $ this.Armor = $ armor [bool] IsAlive () return $ this.Health -gt 0 [void] TakeDamage ( [int] $ damage) if ($ this.armor -gt 0) $ damage = $ damage - 0,4 * $ this.Armor * $ damage $ this.Health - = $ damage $ c = [Charakter] :: new ("xxx", 50, 10, 1.0) $ c.TakeDamage (20) $ c.IsAlive () True $ c.Health 38 $ c.TakeDamage (40) $ c.Health 14 $ c.TakeDamage ( 40) $ c.Health -10 $ c.IsAlive () False
Sie können sogar Vererbung machen, wenn Sie möchten, aber ich glaube, Sie sollten an dieser Stelle wahrscheinlich eine andere Sprache verwenden.
PowerShell verfügt über eine eigene IDE für die Skriptentwicklung, die ein interaktives Fenster, mehrere Registerkarten für Skripts mit Code-Vervollständigung, eine integrierte Hilfe für alle Cmdlets und vieles mehr umfasst. Es ist ein sehr schickes Werkzeug, und ich empfehle Ihnen, es auszuprobieren.
Sie haben jetzt die Fähigkeiten von PowerShell als Skriptsprache kennen gelernt und ein wenig über die Designziele und die Historie erfahren. In Teil zwei werde ich die interaktiven Aspekte von PowerShell ausführlich behandeln.