PowerShell 5.0 – Windows-Automation für Einsteiger und Profis
Dr. Tobias Weltner
Dr. Tobias Weltner
Lektorat: Ariane Hesse
Korrektorat: Sibylle Feldmann
Satz: mediaService, www.mediaservice.tv
Herstellung: Susanne Bröckelmann
Umschlaggestaltung: Michael Oreal, www.oreal.de, unter Verwendung eines Fotos von Valerie Loiseleux / iStock. by Getty Images
Druck und Bindung: Druckerei C.H. Beck, www.becksche.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-96009-009-0
PDF 978-3-96010-033-1
ePub 978-3-96010-034-8
mobi 978-3-96010-035-5
1. Auflage 2016
Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.
5 4 3 2 1 0
Inhalt
Einführung
Wer braucht eigentlich PowerShell?
Handwerkszeug für Windows-Admins
Moderne Lernkurve
Computer – ich/ich – Computer: PowerShell als Fremdsprache
PowerShell als Ersatz für VBScript und Batch
Grenzenloses PowerShell – über Computergrenzen hinweg
Strategische Plattform und Orchestrierung
Anwendungsentwicklung
Persönliche Entwicklung
Wie Sie dieses Buch nutzen
Noch mehr Unterstützung
1 PowerShell kennenlernen
Die PowerShell-Konsole einrichten
PowerShell-Konsole starten
PowerShell-Version kontrollieren
Symbol an Taskleiste heften
Bessere Schrift für die Konsole
Neue Konsolenfunktionen bei Windows 10 aktivieren
Sprungliste: Administratorrechte und ISE
32-Bit- und 64-Bit-Versionen
PowerShell ISE einsetzen
Erste Schritte mit PowerShell
Wichtige Vorsichtsmaßnahmen
Befehle eingeben
Ergebnisse empfangen
Farbcodierungen verstehen
Rechnen mit PowerShell
Umwandlungen
Zahlenreihen
Unvollständige und mehrzeilige Eingaben
Skriptausführung erlauben
Tippfehler vermeiden und Eingaben erleichtern
Autovervollständigung
Pfadnamen vervollständigen
Befehlszeilen erneut verwenden
Befehlsnamen autovervollständigen
Parameter-Autovervollständigung
Argument-Autovervollständigung
PowerShell-Hilfe aus dem Internet nachladen
Hilfe ohne Internetzugang installieren
Hilfe bei PowerShell 3
Klassische Konsole oder moderner ISE-Editor?
Einschränkungen des ISE-Editors
Einschränkungen der klassischen Konsole
PowerShell-2.0-Testumgebung
Testen Sie Ihr Wissen!
Teil A Interaktive Befehlskonsole
2 Cmdlets – die PowerShell-Befehle
Alles, was Sie über Cmdlets wissen müssen
Cmdlets für eine Aufgabe finden
Suche nach Tätigkeit oder Tätigkeitsbereich
Mit ISE nach Cmdlets suchen
Mit der Hilfe nach Cmdlets suchen
Mit Parametern Wünsche formulieren
Parameter wecken das volle Potenzial der Cmdlets
Drei universelle Parametertypen
Common Parameter – allgemeine Parameter für alle Cmdlets
Fehlermeldungen unterdrücken
Unvollständige Parameternamen
Parameter-Binding sichtbar machen
Neue Cmdlets aus Modulen nachladen
Neue Module automatisch nachladen
Auslaufmodell: Snap-Ins
Alias: Zweitname für Cmdlets
Aliase sind keine neuen Befehle
Befehlstypen ermitteln
Klassische cmd.exe-Interpreterbefehle sind Cmdlets
Eigene Aliase anlegen
Testaufgaben
3 PowerShell-Laufwerke
Dateisystemaufgaben meistern
Ordner anlegen
Dateien anlegen und Informationen speichern
Dateien finden
Dateien und Ordner kopieren
Dateien umbenennen
Dateien und Ordner löschen
Größe eines Laufwerks ermitteln
Größe eines Ordners ermitteln
Umgebungsvariablen
Alle Umgebungsvariablen auflisten
Auf einzelne Umgebungsvariablen zugreifen
Umgebungsvariablen ändern
Windows-Registrierungsdatenbank
Schlüssel suchen
Werte lesen
Neue Registry-Schlüssel anlegen
Werte hinzufügen, ändern und löschen
Virtuelle Laufwerke und Provider
Neue PowerShell-Laufwerke
Mit Pfadnamen arbeiten
Unterstützte Platzhalterzeichen in Pfadnamen
-Path oder -LiteralPath?
Existenz eines Pfads prüfen
Pfadnamen auflösen
Testaufgaben
4 Anwendungen und Konsolenbefehle
Programme starten
Optionen für den Programmstart festlegen
Nicht unterstützte Konsolenbefehle im ISE-Editor
Argumente an Anwendungen übergeben
Hilfe für Konsolenbefehle anzeigen
Beispiel: Lizenzstatus von Windows überprüfen
Argumentübergabe kann scheitern
Texteingaben an Konsolenbefehle senden
Ergebnisse von Anwendungen weiterverarbeiten
Error Level auswerten
Fragen an Benutzer stellen mit choice.exe
Rückgabetext auswerten
Rückgabetexte in Objekte verwandeln
Rückgabetext analysieren
Laufende Programme steuern
Feststellen, ob ein Prozess läuft
Auf einen Prozess warten
Einstellungen laufender Prozesse ändern
Prozesse vorzeitig abbrechen
Testaufgaben
5 Skripte einsetzen
PowerShell-Skripte verfassen
Skriptcode eingeben
Eingabehilfen spüren Tippfehler auf
Skript ausführen
Sicherheitseinstellungen und Ausführungsrichtlinien
Profilskripte – die Autostartskripte
Vier verschiedene Profilskripte – pro Host
Profilskript anlegen und öffnen
Typische Profilskriptaufgaben durchführen
Skripte außerhalb von PowerShell starten
PowerShell-Startoptionen
Befehlsfolgen extern ausführen
PowerShell-Code als geplante Aufgabe ausführen
Nicht-PowerShell-Skripte öffnen
Stapeldateien (Batchdateien)
VBScript-Dateien ausführen
Skripte digital signieren
Digitales Zertifikat beschaffen
Zertifikat aus PFX-Datei laden
Zertifikat aus Zertifikatspeicher laden
Skript digital signieren
Digitale Signaturen überprüfen
Signaturen mit einem Zeitstempel versehen
6 Die PowerShell-Pipeline
Aufbau der PowerShell-Pipeline
Prinzipieller Aufbau der Pipeline
Die sechs wichtigsten Pipeline-Befehle
Select-Object
Selbst festlegen, welche Informationen wichtig sind
Platzhalterzeichen verwenden
Weitere Informationen anfügen
-First, -Last und -Skip
Unsichtbare Eigenschaften sichtbar machen
Sonderfall -ExpandProperty
Wie ETS Objekte in Text verwandelt
Where-Object
Where-Object: stets nur zweite Wahl
Clientseitiger Universalfilter
Leere Elemente aussortieren
Fortgeschrittene Syntax bietet noch mehr Möglichkeiten
Dateiinhalte filtern
IP-Adressen bestimmen
Alternativen zu Where-Object
Sort-Object
Cmdlet-Ergebnisse sortieren
Nach mehreren Spalten sortieren
Sortierung mit anderen Cmdlets kombinieren
ForEach-Object
Grundprinzip: eine Schleife
Group-Object
Häufigkeiten feststellen
Gruppen bilden
Measure-Object
Statistische Berechnungen
Ordnergrößen berechnen
Mit »berechneten« Eigenschaften arbeiten
Datentyp der Sortierung ändern
Gruppierung nach bestimmten Textteilen
Umwandlung von Byte in Megabyte
Hashtables: mehrere Werte übergeben
Mehrere Spalten in umgekehrter Sortierung
Mehrspaltige Anzeigen
Berechnete Spalten hinzufügen
Spaltenbreite, Bündigkeit und Gruppenüberschriften
Frei wählbare Gruppierungskriterien
Pipeline und Performance: Optimierungen
Flaschenhals Pipeline
Klassische Schleifen sind wesentlich schneller
Die Pipeline ist wesentlich reaktionsfreudiger
Weniger Speicherbedarf oder mehr Geschwindigkeit?
Testaufgaben
7 Ergebnisse ausgeben und formatieren
Ergebnisse als Text darstellen
Ergebnisse in Textdateien schreiben
Textformatierung ändern
Automatische Textformatierung verstehen
Mehrspaltige Anzeige
Out-Printer: Ergebnisse zu Papier bringen
Out-WinWord: Ergebnisse direkt an Microsoft Word senden
Out-PDF: mit Microsoft Word PDF-Reports erstellen
Ergebnisse als Objekte exportieren
Export-CSV: Export an Microsoft Excel und andere Programme
Ergebnisse serialisieren mit XML und JSON
HTML-Reports erstellen
Objekteigenschaften in HTML-Spalten umwandeln
HTML im Webbrowser anzeigen
HTML-Reports ansprechend und farbig gestalten
Testaufgaben
Teil B Objektorientierte Shell
8 Mit Objekten arbeiten
Eigenschaften und Methoden
Eigenschaften
Methoden
Eigenschaften und Methoden anzeigen
Hilfe für Objekteigenschaften und -methoden finden
Ergebnisse eines Befehls untersuchen
Unterschiedliche Objekttypen
Nach Objekttypen filtern
Änderbare Eigenschaften finden
Primitive Datentypen sind auch Objekte
Eigenschaften lesen
Eigenschaften von vielen Objekten gleichzeitig abrufen
Eigenschaften ändern
Änderungen wirksam werden lassen
Methoden aufrufen
Eine Methode mit mehreren Signaturen
Testaufgaben
9 Operatoren und Bedingungen
Operatoren – Aufbau und Namensgebung
Wie Operatornamen aufgebaut sind
Unäre Operatoren
Zuweisungsoperatoren
Vergleichsoperatoren
Unterscheidung zwischen Groß- und Kleinschreibung
Unterschiedliche Datentypen vergleichen
Vergleiche umkehren
Vergleiche kombinieren
Vergleiche auf Arrays anwenden
Bedingungen
if-Bedingung
Switch-Bedingung
Where-Object
10 Textoperationen und reguläre Ausdrücke
Texte zusammenfügen
Variableninhalte mit doppelten Anführungszeichen integrieren
Der Formatierungsoperator »-f«
Textstellen finden und extrahieren
Texte splitten
Informationen in Texten finden
Reguläre Ausdrücke: Textmustererkennung
Erste Schritte: Mit Textmustern arbeiten
Bestandteile eines regulären Ausdrucks
Längste oder kürzeste Fassung?
Textstellen ersetzen
Ersetzungen ohne Zeichenverlust
Bezug auf den Originaltext nehmen
Delegatfunktionen
Rückverweise im Muster
Split und Join: eine mächtige Strategie
Nach verschiedenen Zeichen splitten
Splitten ohne Trennzeichen(verlust): LookBehind und LookAround
Mehrere Treffer in einem Text finden
[Regex]::Matches einsetzen
Ein- und Mehrzeilenmodus
Testaufgaben
11 Typen verwenden
Typumwandlungen
Automatische Typzuweisung durch PowerShell
Explizite Umwandlung in einen anderen Typ
Testumwandlungen zum Validieren
Verkettete Umwandlungen
Umwandlungen bei Cmdlets
Neue Objekte durch Typumwandlungen
Implizite Umwandlung und typisierte Variablen
Typisierte Variablen
Typisierte Parameter
Typisierte Eigenschaften und Argumente
Vergleichsoperationen
Verborgene Befehle in Typen
Statische Methoden verwenden
Eindeutige GUIDs generieren
Dateiextension ermitteln
Mathematische Funktionen
Zahlenformate konvertieren
DNS-Auflösung
Umgebungsvariablen
Pfade zu Systemordnern finden
Konsoleneinstellungen
Spezielle Datumsformate lesen
Statische Eigenschaften verwenden
Neue Objekte herstellen
Konstruktoren verstehen
Ein Credential-Object zur automatischen Anmeldung
Umgang mit XML-Daten
WMI-Remotezugriffe mit Anmeldung
COM-Objekte verwenden
Dialogfeld öffnen
Sprachausgabe
Office-Automation
Zugriff auf Datenbanken
Automatische Updates
Verknüpfungen anlegen und ändern
Netzwerkmanagement
Welche COM-Objekte gibt es sonst noch?
Webdienste ansprechen
SOAP-basierte Webdienste
RESTful-Webdienste
Neue .NET-Typen finden
Type Accelerators untersuchen
.NET-Assemblies durchsuchen
Typen nach Stichwort suchen
Typen mit bestimmten Befehlen finden
Typen nachladen
Assembly-Namen feststellen
Aktuell geladene Assemblies auflisten
Zusätzliche Assembly nachladen
Assembly aus Datei nachladen
Testaufgaben
Teil C Automationssprache
12 Einfache Funktionen
Alles Wichtige: ein Überblick
Eigene Funktionen herstellen
Parameter definieren
Parameter implementieren
Funktionen per Modul überall verfügbar machen
Hilfe – Bedienungsanleitung hinzufügen
Eine bessere Prompt-Funktion
Zwingend erforderliche Parameter
Eine Funktion mit zwingend erforderlichen Parametern
Automatische Nachfrage
Argumente ohne Parameter
Rückgabewerte festlegen
Mehrere Rückgabewerte werden zum Array
Return-Anweisung
Write-Output
Unerwünschte Rückgabewerte unterdrücken
13 Skriptblöcke
Skriptblöcke: Transportcontainer für Code
Einsatzbereiche für Skriptblöcke
Skripte sind dateibasierte Skriptblöcke
Code in separater PowerShell ausführen
Code remote ausführen
Rückgabewerte
Pipeline-Fähigkeit
Schleifen und Bedingungen
Gültigkeitsbereiche
Zeitkapsel: Closures
Delegates
Zugriff auf AST und Parser
Codesicherheit
14 Pipeline-fähige Funktionen
Anonyme Pipeline-Funktion
Prototyping
Pipeline-fähige Funktion erstellen
Benannte Parameter
Where-Object durch eine Funktion ersetzen
Kurzes Resümee
Parameter und Pipeline-Kontrakt
»ISA«-Kontrakt: Pipeline-Eingaben direkt binden
»HASA«-Kontrakt: Objekteigenschaften lesen
»HASA« und »ISA« kombinieren
CSV-Dateien direkt an Funktionen übergeben
Aliasnamen für Parameter
Modularer Code mit Pipeline-fähigen Funktionen
Ausgangspunkt: ein unleserliches Skript
Teil 1: Get-NewFilenameIfPresent
Teil 2: ConvertTo-AbsoluteURL
Teil 3: Get-ImageFromWebsite
Teil 4: Download-File
15 Objektorientierte Rückgabewerte
Mehrere Informationen zurückgeben
Objekte speichern mehrere Informationen strukturiert
Eigene Objekte mit Ordered Hashtables anlegen
Primär sichtbare Eigenschaften festlegen
16 Fortgeschrittene Parameter
Argumentvervollständigung
Statische Autovervollständigung für Parameter
Autovervollständigung über Enumerationsdatentyp
Autovervollständigung über ValidateSet
Vordefinierte Enumerationsdatentypen finden
Eigene Enumerationsdatentypen erstellen
Dynamische Argumentvervollständigung
Zuweisungen mit Validierern überprüfen
ValidateSet
ValidateRange
ValidateLength
ValidatePattern
ValidateCount
ValidateScript
Nullwerte und andere Validierer
Parameter in ParameterSets einteilen
Gegenseitig ausschließende Parameter
Binding über Datentyp
Parameter in mehreren Parametersätzen
Simulationsmodus (-WhatIf) und Sicherheitsabfrage (-Confirm)
Festlegen, welche Codeteile übersprungen werden sollen