Geek School Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
In dieser Ausgabe der Geek School helfen wir Ihnen, die leistungsfähige PowerShell-Skriptsprache zu verstehen, die direkt in Windows integriert ist und in einer IT-Umgebung von großem Nutzen ist.
Während diese Serie nicht auf eine Prüfung ausgerichtet ist, ist das Erlernen von PowerShell eines der wichtigsten Dinge, die Sie als Netzwerkadministrator tun können. Wenn Sie also etwas lernen möchten, um Ihrer IT-Karriere zu helfen, dann ist es das. Außerdem macht es viel Spaß.
Einführung
PowerShell ist das leistungsfähigste Automatisierungswerkzeug, das Microsoft bietet, und zwar sowohl als Shell als auch als Skriptsprache.
Bitte beachten Sie, dass diese Serie auf PowerShell 3 basiert, das im Lieferumfang von Windows 8 und Server 2012 enthalten ist. Wenn Sie Windows 7 ausführen, laden Sie bitte das PowerShell 3-Update herunter, bevor Sie fortfahren.
Treffen Sie die Konsole und die ISE
Es gibt zwei Möglichkeiten für die sofortige Interaktion mit PowerShell: die Konsole und die Integrated Scripting Environment (auch als ISE bezeichnet). Die ISE hat sich gegenüber der abscheulichen Version, die mit PowerShell 2 ausgeliefert wurde, erheblich verbessert. Sie können sie öffnen, indem Sie die Tastenkombination Win + R drücken, um eine Run-Box aufzurufen, anschließend powershell_ise eingeben und die Eingabetaste drücken.
Wie Sie sehen, bietet die ISE eine geteilte Ansicht, so dass Sie schnell Skripts erstellen können, während Sie das Ergebnis in der unteren Hälfte der ISE sehen können. Die untere Hälfte der ISE, in der die Ergebnisse Ihres Skripts gedruckt werden, kann auch als REPL-Eingabeaufforderung verwendet werden - ähnlich wie bei der Eingabeaufforderung. Die ISE von Version 3 unterstützte schließlich die Unterstützung für Intellisense sowohl im Skriptbereich als auch in der interaktiven Konsole.
Alternativ können Sie mit PowerShell auch über die PowerShell-Konsole interagieren, die ich für die meisten dieser Serien verwenden werde. Die PowerShell Console verhält sich ähnlich wie die Eingabeaufforderung - Sie geben einfach Befehle ein und spucken die Ergebnisse aus. Um die Windows PowerShell Console zu öffnen, drücken Sie erneut die Tastenkombination Win + R, um ein Ausführungsfeld zu öffnen, geben Sie Powershell ein und drücken Sie die Eingabetaste.
REPL-Aufforderungen wie diese sind für die sofortige Befriedigung großartig: Sie geben einen Befehl ein und erhalten Ergebnisse. Die Konsole bietet zwar keine Intellisense-Funktion, jedoch eine so genannte Tab-Vervollständigung, die in etwa gleich funktioniert. Geben Sie einfach einen Befehl ein und drücken Sie die Tabulatortaste, um mögliche Übereinstimmungen anzuzeigen.
Verwenden des Hilfesystems
In früheren Versionen von PowerShell waren bei der Installation von Windows Hilfedateien enthalten. Dies war größtenteils eine gute Lösung, brachte jedoch ein erhebliches Problem mit sich. Als das PowerShell-Hilfsteam die Arbeit an den Hilfedateien einstellen musste, waren die PowerShell-Entwickler noch mit dem Programmieren und Ändern beschäftigt. Dies hatte zur Folge, dass die Hilfedateien bei der Auslieferung von PowerShell nicht korrekt waren, da sie nicht die neueren Änderungen enthielten, die am Code vorgenommen wurden. Zur Behebung dieses Problems werden von PowerShell 3 keine Hilfedateien mitgeliefert und ein aktualisierbares Hilfesystem bereitgestellt. Das heißt, bevor Sie etwas tun, sollten Sie die neuesten Hilfedateien herunterladen. Sie können dies tun, indem Sie eine PowerShell Console öffnen und Folgendes ausführen:
Update-Hilfe
Herzlichen Glückwunsch zum Ausführen Ihres ersten PowerShell-Befehls! Die Wahrheit ist, dass der Update-Help-Befehl weit mehr Optionen bietet, als ihn nur auszuführen. Um sie zu sehen, möchten wir die Hilfe für den Befehl anzeigen. Um die Hilfe für einen Befehl anzuzeigen, übergeben Sie einfach den Namen des Befehls, mit dem Sie Hilfe benötigen, an den Parameter Name des Befehls Get-Help. Beispiel:
Get-Help -Name Update-Hilfe
Sie fragen sich wahrscheinlich, wie Sie den ganzen Text trotzdem interpretieren sollen. Ich meine, warum gibt es zwei Informationen unter dem Syntaxabschnitt und warum gibt es so viele Klammern überall? Das Wichtigste zuerst: Der Grund für die Informationsblöcke im Syntaxabschnitt besteht darin, dass der Befehl auf unterschiedliche Weise ausgeführt wird. Diese Parameter werden technisch als Parametersätze bezeichnet und Sie können jeweils nur einen Satz verwenden (Parameter aus verschiedenen Sätzen können nicht gemischt werden). In dem obigen Screenshot können Sie sehen, dass der obere Parametersatz einen SourcePath-Parameter hat, der untere jedoch nicht. Der Grund dafür ist, dass Sie den obersten Parametersatz (denjenigen, der SourcePath enthält) verwenden würden, wenn Sie Ihre Hilfedateien von einem anderen Computer in Ihrem Netzwerk aktualisieren, der sie bereits heruntergeladen hat. Sie müssen jedoch keinen Quellpfad angeben wollte gerade die neuesten Dateien von Microsoft holen.
Um die zweite Frage zu beantworten, gibt es eine bestimmte Syntax, die Hilfedateien folgt. Hier ist es:
- Die eckigen Klammern um einen Parameternamen und dessen Typ bedeuten, dass es sich um einen optionalen Parameter handelt. Der Befehl funktioniert auch ohne diesen Parameter.
- Eckige Klammern um den Parameternamen bedeuten, dass es sich bei dem Parameter um den Positionsparameter handelt.
- Die Sache rechts neben einem Parameter in den eckigen Klammern gibt an, welchen Datentyp der Parameter erwartet.
Sie sollten zwar lernen, die Hilfedateisyntax zu lesen. Wenn Sie sich bei einem bestimmten Parameter nicht sicher sind, fügen Sie -Full am Ende des Befehls get help hinzu und scrollen Sie zum Parameterabschnitt. Dort erfahren Sie mehr über die einzelnen Parameter Parameter.
Get-Help -Name Update-Help-Full
Das letzte, was Sie über das Hilfesystem wissen müssen, ist, wie Sie es zum Erkennen von Befehlen verwenden können, was eigentlich sehr einfach ist. Sie sehen, die PowerShell akzeptiert fast überall Platzhalter. Wenn Sie sie zusammen mit dem Befehl "Get-Help" verwenden, können Sie einfach Befehle erkennen. Ich suche zum Beispiel nach Befehlen, die sich auf Windows-Dienste beziehen:
Get-Help -Name * -Service *
Sicher, alle diese Informationen sind für den Schläger vielleicht nicht von Nutzen, aber vertrauen Sie mir, nehmen Sie sich die Zeit und lernen Sie, wie Sie das Hilfesystem verwenden. Es ist immer nützlich, selbst für fortgeschrittene Scripters, die dies seit Jahren tun.
Sicherheit
Dies wäre keine richtige Einführung ohne die Sicherheit zu erwähnen. Die größte Sorge für das PowerShell-Team ist, dass PowerShell der neueste und größte Angriffspunkt für Skript-Kinder ist. Sie haben ein paar Sicherheitsvorkehrungen getroffen, um sicherzustellen, dass dies nicht geschieht. Schauen wir uns sie an.
Die grundlegendste Form des Schutzes beruht auf der Tatsache, dass die PS1-Dateierweiterung (die Erweiterung, mit der ein PowerShell-Skript bezeichnet wird) nicht bei einem PowerShell-Host registriert ist, sondern tatsächlich bei Notepad. Das heißt, wenn Sie auf eine Datei doppelklicken, wird sie mit Notepad geöffnet, anstatt ausgeführt zu werden.
Zweitens können Sie keine Skripts von der Shell aus ausführen, indem Sie einfach den Namen des Skripts eingeben. Sie müssen den vollständigen Pfad zum Skript angeben. Wenn Sie also ein Skript auf Ihrem Laufwerk C ausführen möchten, müssen Sie Folgendes eingeben:
C: \ runme.ps1
Wenn Sie sich bereits im Stammverzeichnis des Laufwerks C befinden, können Sie Folgendes verwenden:
.\ runme.ps1
Schließlich gibt es in PowerShell auch Ausführungsrichtlinien, mit denen Sie nur alte Skripts ausführen können. Tatsächlich können Sie standardmäßig keine Skripts ausführen und müssen Ihre Ausführungsrichtlinie ändern, wenn Sie sie ausführen dürfen. Es gibt 4 bemerkenswerte Ausführungsrichtlinien:
- Beschränkt: Dies ist die Standardkonfiguration in PowerShell. Diese Einstellung bedeutet, dass kein Skript unabhängig von seiner Signatur ausgeführt werden kann. Das einzige, was in PowerShell mit dieser Einstellung ausgeführt werden kann, ist ein einzelner Befehl.
- AllSigned: Diese Einstellung ermöglicht die Ausführung von Skripts in PowerShell. Dem Skript muss eine digitale Signatur eines vertrauenswürdigen Herausgebers zugeordnet sein. Bevor Sie die Skripts von vertrauenswürdigen Herausgebern ausführen, wird eine Aufforderung angezeigt.
- RemoteSignedHinweis: Diese Einstellung ermöglicht die Ausführung von Skripts. Voraussetzung ist jedoch, dass die aus dem Internet heruntergeladenen Skript- und Konfigurationsdateien über eine zugehörige digitale Signatur eines vertrauenswürdigen Herausgebers verfügen. Skripts, die auf dem lokalen Computer ausgeführt werden, müssen nicht signiert werden. Vor dem Ausführen des Skripts werden keine Eingabeaufforderungen angezeigt.
- Uneingeschränkt: Dadurch können nicht signierte Skripts ausgeführt werden, einschließlich aller aus dem Internet heruntergeladenen Skripts und Konfigurationsdateien. Dazu gehören Dateien aus Outlook und Messenger. Das Risiko besteht darin, Skripts ohne Signatur oder Sicherheit auszuführen. Wir haben wieder angefangen, dass Sie uns nie diese Einstellung vornehmen.
Öffnen Sie eine PowerShell-Konsole, und geben Sie Folgendes ein:
Get-ExecutionPolicy
Für diesen Kurs und die meisten anderen Umstände ist die RemoteSigned-Richtlinie die beste. Sie können also Ihre Richtlinie mit den folgenden Anweisungen ändern.
Hinweis: Dies muss von einer erhöhten PowerShell-Konsole aus erfolgen.
Set-ExecutionPolicy RemoteSigned
Das ist alles für diese Zeit, Leute, bis morgen für mehr PowerShell-Spaß.
Haftungsausschluss: Der richtige Begriff für einen PowerShell-Befehl ist ein Cmdlet. Von nun an verwenden wir diese korrekte Terminologie. Es fühlte sich nur angemessener an, sie für diese Einführung als Befehle zu bezeichnen.
Wenn Sie Fragen haben, können Sie mir @taybgibb twittern oder einfach einen Kommentar hinterlassen.