Windows PowerShell – Grundlagen und Scripting-Praxis für Einsteiger | 2 |
Impressum | 4 |
Inhalt | 5 |
Einleitung | 9 |
Wie Sie dieses Buch nutzen | 10 |
Achtung | 10 |
Noch mehr Unterstützung | 11 |
Kapitel 1 - PowerShell startklar machen | 13 |
Mit PowerShell Kontakt aufnehmen | 14 |
PowerShell 6 auf Linux und MacOS | 15 |
Weitere PowerShell-Hosts | 16 |
PowerShell und Hosts einsatzbereit machen | 16 |
Die PowerShell-Konsole einrichten | 16 |
PowerShell-Version kontrollieren | 17 |
Aktuelle Version der PowerShell nutzen | 18 |
Symbol an Taskleiste heften | 19 |
Sprungliste: Administratorrechte und ISE | 20 |
32-Bit- und 64-Bit-Versionen | 20 |
PowerShell ISE einsetzen | 21 |
VSCode und PowerShell | 24 |
PowerShell-Erweiterung laden | 24 |
Erste Schritte mit PowerShell | 25 |
Wichtige Vorsichtsmaßnahmen | 25 |
Befehle eingeben | 25 |
Ergebnisse empfangen | 26 |
Informationen speichern oder umleiten | 27 |
Variablen verwenden | 27 |
Pipeline verwenden | 28 |
IntelliSense-Unterstützung im ISE-Editor | 30 |
Autovervollständigung in der PowerShell-Konsole | 30 |
Farbcodierungen verstehen | 32 |
Rechnen mit PowerShell | 33 |
Umwandlungen | 34 |
Zahlenreihen | 35 |
Unvollständige und mehrzeilige Eingaben | 35 |
Skriptausführung erlauben | 37 |
Tippfehler vermeiden und Eingaben erleichtern | 38 |
Autovervollständigung | 38 |
Pfadnamen vervollständigen | 38 |
Befehlszeilen erneut verwenden | 39 |
Befehlsnamen autovervollständigen | 39 |
Parameter-Autovervollständigung | 40 |
Argument-Autovervollständigung | 40 |
PowerShell-Hilfe aus dem Internet nachladen | 41 |
Hilfe ohne Internetzugang installieren | 42 |
Teil A - Erste Befehle | 43 |
Kapitel 2 - Cmdlets – die PowerShell-Befehle | 45 |
Alles, was Sie über Cmdlets wissen müssen | 46 |
Cmdlets für eine Aufgabe finden | 47 |
Suche nach Tätigkeit oder Tätigkeitsbereich | 48 |
Parameter erkunden | 49 |
Hilfestellung zu Cmdlets abrufen | 50 |
Cmdlet eingeben und Befehl ausführen | 51 |
Mit ISE nach Cmdlets suchen | 55 |
Dialoggestützte Parametereingabe | 58 |
Mit der Hilfe nach Cmdlets suchen | 60 |
Unbekannte Befehle suchen | 61 |
Mit Parametern Wünsche formulieren | 62 |
Parameter wecken das volle Potenzial der Cmdlets | 63 |
Nur das Datum oder nur die Zeit ausgeben | 63 |
Den Wochentag eines bestimmten Datums errechnen | 64 |
Die aktuelle Kalenderwoche anzeigen | 65 |
Das Datum vor 48 Stunden berechnen | 67 |
Drei universelle Parametertypen | 69 |
Benannte Parameter | 69 |
Switch-Parameter | 69 |
Positionale Parameter | 70 |
Common Parameter – allgemeine Parameter für alle Cmdlets | 73 |
Fehlermeldungen unterdrücken | 75 |
Unvollständige Parameternamen | 76 |
Parameter mit Aliasnamen abkürzen | 76 |
Konflikte bei Parameternamen | 77 |
Neue Cmdlets aus Modulen nachladen | 78 |
Neue Module automatisch nachladen | 79 |
Auslaufmodell: Snap-Ins | 82 |
Alias: Zweitname für Cmdlets | 82 |
Aliase sind keine neuen Befehle | 83 |
Befehlstypen ermitteln | 83 |
Klassische cmd.exe-Interpreterbefehle sind Cmdlets | 84 |
Eigene Aliase anlegen | 85 |
Kapitel 3 - PowerShell-Laufwerke | 87 |
Dateisystemaufgaben meistern | 89 |
Ordner anlegen | 90 |
Dateien anlegen und Informationen speichern | 91 |
Dateien finden | 93 |
Nach Dateinamen oder Dateitypen suchen | 93 |
-Filter und -Include: Unterschiede verstehen | 94 |
Mehrere Top-Level-Ordner durchsuchen | 94 |
Alternative zur Rekursion | 95 |
Nach Dateiinhalten suchen | 96 |
Dateien und Ordner kopieren | 98 |
Einzelne Datei kopieren | 98 |
Mehrere Dateien kopieren | 98 |
Ordner kopieren | 100 |
Dateien umbenennen | 101 |
Einzelne Datei | 101 |
Ganze Ordnerinhalte umbenennen | 101 |
Dateien und Ordner löschen | 103 |
Größe eines Laufwerks ermitteln | 104 |
Größe eines Ordners ermitteln | 105 |
Umgebungsvariablen | 106 |
Alle Umgebungsvariablen auflisten | 107 |
Auf einzelne Umgebungsvariablen zugreifen | 107 |
Umgebungsvariablen ändern | 107 |
Windows-Registrierungsdatenbank | 108 |
Schlüssel suchen | 108 |
Werte lesen | 109 |
Neue Registry-Schlüssel anlegen | 111 |
Werte hinzufügen, ändern und löschen | 112 |
Virtuelle Laufwerke und Provider | 113 |
Neue PowerShell-Laufwerke | 115 |
-Path oder -LiteralPath? | 117 |
Existenz eines Pfads prüfen | 117 |
Pfadnamen auflösen | 118 |
Kapitel 4 - Anwendungen und Konsolenbefehle | 119 |
Programme starten | 121 |
Optionen für den Programmstart festlegen | 123 |
Warten, bis ein Programm wieder beendet ist | 123 |
Programme unter anderem Benutzernamen ausführen | 123 |
Nicht unterstützte Konsolenbefehle im ISE-Editor | 124 |
Argumente an Anwendungen übergeben | 126 |
Hilfe für Konsolenbefehle anzeigen | 126 |
Beispiel: Lizenzstatus von Windows überprüfen | 127 |
Ergebnisse von Anwendungen weiterverarbeiten | 128 |
Error Level auswerten | 128 |
Fragen an Benutzer stellen mit choice.exe | 129 |
Rückgabetext auswerten | 131 |
Rückgabetexte in Objekte verwandeln | 132 |
Rückgabetext analysieren | 133 |
Laufende Programme steuern | 135 |
Feststellen, ob ein Prozess läuft | 135 |
Auf einen Prozess warten | 135 |
Einstellungen laufender Prozesse ändern | 136 |
Prozesse vorzeitig abbrechen | 138 |
Teil B - Aufgaben automatisieren | 139 |
Kapitel 5 - PowerShell-Skripte | 141 |
PowerShell-Skripte verfassen | 142 |
Skriptcode eingeben | 142 |
Eingabehilfen spüren Tippfehler auf | 143 |
Skript ausführen | 144 |
Sicherheitseinstellungen und Ausführungsrichtlinien | 144 |
Profilskripte – die Autostartskripte | 145 |
Vier verschiedene Profilskripte – pro Host | 145 |
Profilskript anlegen und öffnen | 146 |
Typische Profilskriptaufgaben durchführen | 147 |
Skripte außerhalb von PowerShell starten | 147 |
PowerShell-Startoptionen | 149 |
Befehlsfolgen extern ausführen | 149 |
PowerShell-Code als geplante Aufgabe ausführen | 150 |
Mit schtasks.exe klassische Aufgaben einrichten | 150 |
Mit dem Modul PSScheduledJob Aufgaben anlegen | 151 |
Kapitel 6 - Die PowerShell-Pipeline | 153 |
Aufbau der PowerShell-Pipeline | 154 |
Prinzipieller Aufbau der Pipeline | 155 |
Die sechs wichtigsten Pipeline-Befehle | 157 |
Select-Object | 157 |
Selbst festlegen, welche Informationen wichtig sind | 158 |
Weitere Informationen anfügen | 160 |
-First, -Last und -Skip | 161 |
Unsichtbare Eigenschaften sichtbar machen | 162 |
Sonderfall -ExpandProperty | 162 |
Mit der Punktschreibweise auf Einzelinformationen zugreifen | 164 |
Einschränkungen der Punktschreibweise | 165 |
Where-Object | 166 |
Where-Object: stets nur zweite Wahl | 166 |
Clientseitiger Universalfilter | 166 |
Leere Elemente aussortieren | 168 |
Fortgeschrittene Syntax bietet noch mehr Möglichkeiten | 168 |
Sort-Object | 171 |
Cmdlet-Ergebnisse sortieren | 171 |
Sortierung mit anderen Cmdlets kombinieren | 172 |
ForEach-Object | 174 |
Grundprinzip: eine Schleife | 174 |
Ergebnisse verfeinern | 175 |
Group-Object | 175 |
Häufigkeiten feststellen | 176 |
Gruppen bilden | 177 |
Measure-Object | 178 |
Statistische Berechnungen | 178 |
Ordnergrößen berechnen | 179 |
Mit »berechneten« Eigenschaften arbeiten | 179 |
Datentyp der Sortierung ändern | 180 |
Gruppierung nach bestimmten Textteilen | 180 |
Umwandlung von Byte in Megabyte | 181 |
Hashtables: mehrere Werte übergeben | 182 |
Mehrere Spalten in umgekehrter Sortierung | 182 |
Mehrspaltige Anzeigen | 183 |
Berechnete Spalten hinzufügen | 184 |
Spaltenbreite, Bündigkeit und Gruppenüberschriften | 184 |
Teil C - Operatoren nutzen | 187 |
Kapitel 7 - Operatoren und Bedingungen | 189 |
Operatoren – Aufbau und Namensgebung | 190 |
Wie Operatornamen aufgebaut sind | 191 |
Unäre Operatoren | 191 |
Zuweisungsoperatoren | 192 |
Mehreren Variablen unterschiedliche Werte zuweisen | 193 |
Variableninhalte ändern | 193 |
Vergleichsoperatoren | 194 |
Unterscheidung zwischen Groß- und Kleinschreibung | 195 |
Unterschiedliche Datentypen vergleichen | 196 |
Der Datentyp des ersten Werts zählt | 196 |
Automatisches Widening | 196 |
Vergleiche umkehren | 197 |
Vergleiche kombinieren | 198 |
Vergleiche auf Arrays anwenden | 199 |
Bedingungen | 201 |
if-Bedingung | 201 |
Switch-Bedingung | 202 |
Where-Object | 204 |
Kapitel 8 - Textoperationen und reguläre Ausdrücke | 205 |
Texte zusammenfügen | 206 |
Der Formatierungsoperator »-f« | 207 |
Bündige Spalten herstellen | 208 |
Zahlen formatieren | 209 |
Datums- und Zeitangaben formatieren | 210 |
Textstellen finden und extrahieren | 212 |
Texte splitten | 213 |
Informationen in Texten finden | 215 |
Positionen bestimmen und Text extrahieren | 215 |
Reguläre Ausdrücke | 215 |
Reguläre Ausdrücke: Textmustererkennung | 216 |
Erste Schritte: Mit Textmustern arbeiten | 216 |
Muster definieren | 217 |
Viele Treffer pro Datei finden | 217 |
Muster erweitern | 218 |
Einzelinformationen mit runden Klammern abgrenzen | 219 |
Ergebnisse in echte Objekte verwandeln | 219 |
Bestandteile eines regulären Ausdrucks | 220 |
Anker | 220 |
Platzhalter | 220 |
Quantifizierer | 221 |
Längste oder kürzeste Fassung? | 222 |
Textstellen ersetzen | 223 |
Split und Join: eine mächtige Strategie | 224 |
Nach verschiedenen Zeichen splitten | 224 |
Teil D - Betriebssystem-Funktionen einsetzen | 227 |
Kapitel 9 - Mit Objekten arbeiten | 229 |
Eigenschaften und Methoden | 232 |
Eigenschaften | 232 |
Eigenschaften lesen | 233 |
Eigenschaften ändern | 234 |
Methoden | 235 |
Eigenschaften und Methoden anzeigen | 238 |
Hilfe für Objekteigenschaften und -methoden finden | 239 |
Ergebnisse eines Befehls untersuchen | 240 |
Unterschiedliche Objekttypen | 242 |
Nach Objekttypen filtern | 242 |
Änderbare Eigenschaften finden | 243 |
Primitive Datentypen sind auch Objekte | 245 |
Eigenschaften lesen | 246 |
Eigenschaften von vielen Objekten gleichzeitig abrufen | 247 |
Pipeline entpackt Arrays automatisch | 247 |
»Automatic Unrolling«: Punktschreibweise bei Arrays | 248 |
Eigenschaften ändern | 250 |
Methoden aufrufen | 251 |
Eine Methode mit mehreren Signaturen | 252 |
Trim kann mehr als Leerzeichen entfernen | 252 |
Kapitel 10 - Typen verwenden | 255 |
Typumwandlungen | 256 |
Automatische Typzuweisung durch PowerShell | 256 |
Explizite Umwandlung in einen anderen Typ | 257 |
Testumwandlungen zum Validieren | 259 |
Verkettete Umwandlungen | 260 |
Umwandlungen bei Cmdlets | 261 |
Neue Objekte durch Typumwandlungen | 261 |
StringBuilder: schneller Texte zusammensetzen | 263 |
ArrayList: Arrays schneller und komfortabler machen | 264 |
WMI-Objekte ansprechen | 266 |
LDAP-Pfade in Benutzerkonten verwandeln | 266 |
Multiple Treffer mit regulären Ausdrücken | 267 |
Implizite Umwandlung und typisierte Variablen | 268 |
Typisierte Variablen | 268 |
Typisierte Parameter | 268 |
Typisierte Eigenschaften und Argumente | 269 |
Vergleichsoperationen | 270 |
Verborgene Befehle in Typen | 271 |
Statische Methoden verwenden | 272 |
Eindeutige GUIDs generieren | 273 |
Dateiextension ermitteln | 273 |
Mathematische Funktionen | 274 |
Zahlenformate konvertieren | 275 |
DNS-Auflösung | 276 |
Umgebungsvariablen | 277 |
Pfade zu Systemordnern finden | 278 |
Konsoleneinstellungen | 278 |
Spezielle Datumsformate lesen | 280 |
Statische Eigenschaften verwenden | 282 |
Neue Objekte herstellen | 282 |
Konstruktoren verstehen | 283 |
Ein Credential-Object zur automatischen Anmeldung | 284 |
Umgang mit XML-Daten | 286 |
WMI-Remotezugriffe mit Anmeldung | 287 |
COM-Objekte verwenden | 288 |
Dialogfeld öffnen | 289 |
Sprachausgabe | 291 |
Office-Automation | 292 |
Zugriff auf Datenbanken | 292 |
Automatische Updates | 294 |
Verknüpfungen anlegen und ändern | 294 |
Netzwerkmanagement | 295 |
Welche COM-Objekte gibt es sonst noch? | 296 |
Webdienste ansprechen | 297 |
RESTful-Webdienste | 297 |
Typen nachladen | 298 |
Assembly-Namen feststellen | 298 |
Aktuell geladene Assemblies auflisten | 298 |
Zusätzliche Assembly nachladen | 299 |
Assembly aus Datei nachladen | 299 |
Teil E - Neue eigene Befehle erfinden | 301 |
Kapitel 11 - Powershell-Funktionen | 303 |
Alles Wichtige: ein Überblick | 304 |
Eigene Funktionen herstellen | 305 |
Parameter definieren | 307 |
Parameter implementieren | 309 |
Funktionen per Modul überall verfügbar machen | 310 |
Hilfe – Bedienungsanleitung hinzufügen | 312 |
Eine bessere Prompt-Funktion | 315 |
Zwingend erforderliche Parameter | 315 |
Eine Funktion mit zwingend erforderlichen Parametern | 316 |
Automatische Nachfrage | 317 |
Argumente ohne Parameter | 317 |
Rückgabewerte festlegen | 318 |
Mehrere Rückgabewerte werden zum Array | 318 |
Return-Anweisung | 319 |
Write-Output | 320 |
Unerwünschte Rückgabewerte unterdrücken | 320 |
Kapitel 12 - Pipeline-fähige Funktionen | 321 |
Anonyme Pipeline-Funktion | 322 |
Prototyping | 323 |
Pipeline-fähige Funktion erstellen | 323 |
Benannte Parameter | 324 |
Where-Object durch eine Funktion ersetzen | 326 |
Kurzes Resümee | 328 |
Parameter und Pipeline-Kontrakt | 328 |
»ISA«-Kontrakt: Pipeline-Eingaben direkt binden | 328 |
Automatische Bindung über den Datentyp | 329 |
ParameterSets einsetzen | 330 |
Mehrdeutigkeiten auflösen | 331 |
»HASA«-Kontrakt: Objekteigenschaften lesen | 331 |
»HASA« und »ISA« kombinieren | 332 |
CSV-Dateien direkt an Funktionen übergeben | 334 |
Aliasnamen für Parameter | 335 |
Modularer Code mit Pipeline-fähigen Funktionen | 336 |
Ausgangspunkt: ein unleserliches Skript | 336 |
Teil 1: Get-NewFilenameIfPresent | 338 |
Teil 2: ConvertTo-AbsoluteURL | 339 |
Teil 3: Get-ImageFromWebsite | 340 |
Teil 4: Download-File | 341 |
Kapitel 13 - Eigene Module erstellen | 345 |
Module sind Ordner | 346 |
Funktion erstellen und testen | 346 |
Funktion in Modul aufnehmen | 347 |
Modul manuell importieren | 348 |
Module automatisch importieren | 348 |
Manifestdatei für ein Modul | 350 |
Neue Manifestdatei anlegen | 350 |
Wirkung einer Manifestdatei | 354 |
Kapitel 14 - PowerShellGet – Module verteilen und nachladen | 355 |
PowerShell Gallery nutzen | 357 |
NuGet-Provider installieren | 357 |
Repository | 358 |
Module finden und installieren | 358 |
Modul herunterladen | 359 |
Modul testweise ausführen | 359 |
Modul dauerhaft installieren | 360 |
Module aktualisieren | 361 |
Side-by-Side-Versionierung | 362 |
Eigene Module veröffentlichen | 362 |
Privates Repository einrichten | 363 |
Freigaben zum Lesen und Schreiben | 363 |
Repository anlegen | 363 |
Modul in Repository übertragen | 364 |
Modul aus Repository installieren | 365 |
Teil F - Fehlerbehandlung und Debugging | 367 |
Kapitel 15 - Fehlerhandling | 369 |
Fehlermeldungen unterdrücken | 370 |
Bestimmen, wie Cmdlets auf Fehler reagieren | 371 |
Fehler mitprotokollieren lassen | 371 |
Erfolg eines Befehlsaufrufs prüfen | 374 |
Fehlerhandler einsetzen | 374 |
Lokaler Fehlerhandler: try…catch | 375 |
Globaler Fehlerhandler: Trap | 379 |
Teil G - Mit Remoting quer durchs Netzwerk | 383 |
Kapitel 16 - Fernzugriff und Netzwerk- Troubleshooting | 385 |
Klassische Fernzugriffe | 386 |
Dateisystem | 386 |
Konsolenbefehle | 386 |
Remotefähige Cmdlets | 387 |
Troubleshooting für Fernzugriffe | 388 |
Firewall für DCOM einrichten | 388 |
Namensauflösung überprüfen | 389 |
Remote-Registrierungszugriff erlauben | 390 |
Access Denied: mit passenden Rechten anmelden | 391 |
LocalAccountTokenFilterPolicy | 392 |
Ports überprüfen | 393 |
Kapitel 17 - Windows PowerShell-Remoting | 395 |
PowerShell-Remoting aktivieren | 396 |
Ohne Kerberos und Domäne | 398 |
TrustedHosts-Liste | 398 |
PowerShell-Remoting überprüfen | 399 |
Erste Schritte mit PowerShell-Remoting | 401 |
Remoting-Unterstützung im ISE-Editor | 401 |
Befehle und Skripte remote ausführen | 402 |
Remotefähigen Code entwickeln | 403 |
Argumente an Remotecode übergeben | 404 |
Ergebnisse vom Remotecode an den Aufrufer übertragen | 405 |
Fan-Out: integrierte Parallelverarbeitung | 406 |
ThrottleLimit: Parallelverarbeitung begrenzen | 407 |
Double-Hop und CredSSP: Anmeldeinfos weiterreichen | 409 |
Index | 413 |
A | 413 |
B | 413 |
C | 413 |
D | 414 |
E | 414 |
F | 415 |
G | 415 |
H | 415 |
I | 415 |
J | 416 |
K | 416 |
L | 416 |
M | 416 |
N | 416 |
O | 417 |
P | 417 |
Q | 417 |
R | 417 |
S | 418 |
T | 418 |
U | 419 |
V | 419 |
W | 419 |
X | 419 |
Z | 419 |
www.oreilly.de | 0 |