Bruce Payette
Windows PowerShell im Einsatz
Inhaltsverzeichnis
6
Geleitwort
16
Vorwort
18
Danksagung
20
Über dieses Buch
22
Teil I: PowerShell lernen
28
Willkommen bei PowerShell
30
1.1 Was ist PowerShell?
32
1.1.1 Shells, Befehlszeilen und Skriptsprachen
33
1.1.2 Warum eine neue Shell? Warum gerade jetzt?
34
1.1.3 Das Problem der letzten Meile
35
1.2 Seele einer neuen Sprache
35
1.2.1 Aus der Geschichte lernen
36
1.2.2 Unterstützung von .NET
36
1.3 OOP-Auffrischungskurs
38
1.3.1 Objektorientiertes Programmieren
38
1.3.2 Objekte in PowerShell
40
1.4 Heh! Wo bleibt der Code?
40
1.4.1 Installieren und starten von PowerShell
41
1.4.2 Editieren von Befehlen
43
1.4.3 Befehlsvervollständigung
44
1.4.4 Auswerten von elementaren Ausdrücken
45
1.4.5 Verarbeiten von Daten
46
1.5 Zusammenfassung
52
Grundlagen
54
2.1 Befehlskonzepte und Terminologie
55
2.1.1 Befehle und Commandlets
56
2.1.2 Befehlstypen
59
2.1.3 Aliase und flexible Syntax
63
2.2 Parsing und PowerShell
65
2.2.1 Wie PowerShell ein Skript zerlegt
66
2.2.2 Quoting
67
2.2.3 Parsing im Ausdrucks- und im Befehlsmodus
70
2.2.4 Terminieren von Statements
72
2.3 Pipelines und Befehle
74
2.3.1 Pipelines und Streamingverhalten
75
2.3.2 Parameter und Parameterbindung
76
2.4 Formatierung und Ausgabe
78
2.4.1 Die Format-Commandlets
79
2.4.2 Die Output-Commandlets
81
2.5 Zusammenfassung
84
Arbeiten mit Typen
86
3.1 Typenmanagement wie im wilden Westen
86
3.1.1 PowerShell: eine typ-promiskuitive Sprache
87
3.1.2 Typ-System und Typ-Adaption
89
3.2 Basistypen und Literale
91
3.2.1 Strings
91
3.2.2 Zahlen und numerische Literale
96
3.2.3 Collections: Dictionaries und Hashtabellen
98
3.2.4 Collections: Arrays und Sequenzen
103
3.2.5 Typliterale
108
3.3 Typumwandlungen
111
3.3.1 Wie die Typumwandlung funktioniert
112
3.3.2 PowerShells-Algorithmus zur Typumwandlung
114
3.3.3 Spezielle Typumwandlungen beim Binden von Parametern
117
3.4 Zusammenfassung
119
Operatoren und Ausdrücke
120
4.1 Arithmetische Operatoren
122
4.1.1 Der Additions-Operator
122
4.1.2 Der Multiplikations-Operator
125
4.1.3 Subtraktion, Division und der Modulo-Operator
127
4.2 Die Zuweisungsoperatoren
129
4.2.1 Mehrfache Zuweisungen
130
4.2.2 Mehrfache Zuweisungen mit Typqualifizierern
131
4.2.3 Zuweisungsoperationen als Wertausdrücke
133
4.3 Vergleichsoperatoren
134
4.3.1 Skalare Vergleiche
135
4.3.2 Vergleichsoperatoren und Auflistungen
139
4.4 Operatoren zum Musterabgleich
141
4.4.1 Wildcard Pattern
141
4.4.2 Reguläre Ausdrücke
142
4.5 Logische und Bit-Operatoren
147
4.6 Zusammenfassung
148
Erweiterte Operatoren und Variablen
150
5.1 Operatoren für die Arbeit mit Typen
150
5.2 Die unären Operatoren
153
5.3 Gruppieren, Unterausdrücke und Array-Unterausdrücke
154
5.4 Array-Operatoren
159
5.4.1 Der Komma-Operator ","
159
5.4.2 Der Bereichsoperator
162
5.4.3 Indizieren von Arrays
163
5.5 Operatoren für Eigenschaften und Methoden
169
5.5.1 Der "."-Operator
170
5.5.2 Statische Methoden und der "::"-Operator
172
5.6 Der PowerShell Format-Operator -F
173
5.7 Umleitung und Umleitungsoperatoren
175
5.8 Variablen
178
5.9 Zusammenfassung
183
Flusskontrolle in Skripten
184
6.1 Das if/elseif/else-Statement
185
6.2 Die while-Schleife
188
6.3 Die do/while-Schleife
189
6.4 Die for-Schleife
190
6.5 Die foreach-Schleife
192
6.6 Labels, break und continue
196
6.7 Das switch- Statement
198
6.7.1 Grundlegendes zum switch-Statement
199
6.7.2 Wildcard Pattern und switch-Statement
200
6.7.3 Reguläre Ausdrücke mit dem switch- Statement
201
6.7.4 Dateiverarbeitung mit dem switch- Statement
205
6.7.5 Der $switch-Schleifenenumerator im switch-Statement
206
6.8 Ablaufsteuerung mit Commandlets
207
6.8.1 Das Foreach-Object-Commandlet
208
6.8.2 Das Where-Object-Commandlet
211
6.9 Der Wert von Statements
213
6.10 Zusammenfassung
214
Funktionen und Skripte
216
7.1 Grundlagen von Funktionen
217
7.2 Formale Parameter und das param-Statement
220
7.2.1 Spezifizieren von Parametertypen
222
7.2.2 Umgang mit einer variablen Anzahl von Argumenten
224
7.2.3 Initialisieren von Funktionsparametern
225
7.2.4 Verwendung von switch-Parametern zum Definieren von Flags
227
7.2.5 Lebenszeit von Variablen und Sichtbarkeits-Regeln
229
7.2.6 Bereichsmodifizierer
232
7.3 Rückgabewerte von Funktionen
232
7.3.1 Debugging des Funktionsoutputs
235
7.3.2 Das return-Statement
237
7.4 Funktionen in einer Pipeline
239
7.4.1 Filter und Funktionen
240
7.4.2 Funktionen als Commandlets
242
7.5 Verwalten von Funktionen
243
7.6 Zu guter Letzt – Skripte
245
7.6.1 Übergabe von Argumenten an Skripte
246
7.6.2 Das param-Statement
247
7.6.3 Bereiche und Skripte
248
7.6.4 Skripte beenden und exit-Statement
249
7.6.5 Dotting von Skripten und Funktionen
251
7.7 Zusammenfassung
253
Skriptblöcke und Objekte
254
8.1 Skriptblock-Grundlagen
255
8.1.1 Aufruf von Befehlen
256
8.1.2 Zugriff auf CommandInfo- Objekte
256
8.1.3 Das Skriptblock Literal
259
8.1.4 Funktionen zur Laufzeit definieren
260
8.2 Erzeugen und Manipulieren von Objekten
262
8.2.1 Blick auf die Mitglieder
262
8.2.2 Synthetische Mitglieder
263
8.2.3 Objekte mit Add-Member erweitern
265
8.2.4 Das Select-Object-Commandlet
271
8.3 Arbeiten am Typsystem
274
8.3.1 Hinzufügen einer Eigenschaft
276
8.3.2 Shadowing vorhandener Eigenschaften
277
8.4 Die PowerShell-Sprache erweitern
278
8.4.1 Kleine Sprachen
278
8.4.2 Hinzufügen eines CustomClass-Schlüsselworts
279
8.5 Typerweiterung
284
8.6 Code zur Laufzeit generieren
286
8.6.1 Das Invoke-Expression-Commandlet
287
8.6.2 Die ExecutionContext-Variable
287
8.6.3 Erzeugen von Funktionen über das function: Laufwerk
290
8.7 Zusammenfassung
291
Fehler, Ausnahmen und Skript- Debugging
294
9.1 Fehlerbehandlung
295
9.1.1 ErrorRecords und ErrorStream
296
9.1.2 Die $error-Variable und der -ErrorVariable-Parameter
299
9.1.3 Die Variablen $? und $LASTEXITCODE
302
9.1.4 $ErrorActionPreference und der -ErrorAction-Parameter
305
9.2 Umgang mit Fehlern die die Ausführung beenden
308
9.2.1 Das trap-Statement
308
9.2.2 Das throw-Statement
311
9.3 Skript-Debugging
313
9.3.1 Debugging mit den Host-APIs
313
9.3.2 Das Set-PSDebug-Commandlet
315
9.3.3 Überwachen der Befehlsausführung
315
9.3.4 Schrittweise Überwachung der Ausführung von Anweisungen
318
9.3.5 Überwachen undefinierter Variablen im Strict-Modus
320
9.4 Eingebettete Prompts und Breakpoints
321
9.4.1 Abbrechen eines Skripts während des Schritt-Modus
321
9.4.2 Erstellen eines breakpoint-Befehls
323
9.4.3 Skript ruft Stack oder "Wie kam ich hierher?"
325
9.5 Low-Level- Überwachung
327
9.5.1 Das Trace-Command-Commandlet
328
9.5.2 Verfolgen von Typkonvertierungen
329
9.5.3 Überwachen der Parameterbindung
331
9.6 Das Ereignisprotokoll von PowerShell
335
9.6.1 Das Ereignisprotokoll untersuchen
335
9.6.2 Exchange 2007 und das PowerShell-Ereignisprotokoll
337
9.7 Zusammenfassung
338
Teil II: PowerShell anwenden
340
Verarbeitung von Texten, Dateien und XML
342
10.1 Verarbeiten von unstrukturiertem Text
342
10.1.1 Verwenden von System.String für das Arbeiten mit Text
342
10.1.2 Verwendung regulärer Ausdrücke zur Textmanipulation
349
10.2 Dateiverarbeitung
350
10.2.1 Arbeiten mit PSDrives
352
10.2.2 Arbeiten mit Pfaden die Wildcards enthalten
354
10.2.3 Lesen und Schreiben von Dateien
358
10.2.4 Suche in Dateien mit dem Select-String-Commandlet
365
10.3 XML-Verarbeitung
367
10.3.1 Verwendung von XML-Objekten
368
10.3.2 Laden und Speichern von XML-Dateien
372
10.3.3 XML-Dokumente in einer Pipeline verarbeiten
379
10.3.4 XPath verwenden
380
10.3.5 Die Import-Clixml- und Export-Clixml-Commandlets
385
10.4 Zusammenfassung
388
.NET und WinForms
390
11.1 .NET in PowerShell verwenden
390
11.1.1 .NET-Grundlagen
391
11.1.2 Arbeiten mit Assemblies
391
11.1.3 Auffinden von Typen
394
11.1.4 Instanzen von Typen erzeugen
396
11.1.5 PowerShell ist nicht C# – eine Moralgeschichte
399
11.1.6 Arbeiten mit generischen Typen
403
11.2 PowerShell und das Internet
407
11.2.1 Beispiel: Herunterladen einer Webseite
407
11.2.2 Beispiel: Ein RSS-Feed verarbeiten
408
11.2.3 Beispiel: Einen Webserver mit PowerShell schreiben
410
11.3 PowerShell und grafische Benutzerschnittstellen
417
11.3.1 WinForms-Grundlagen
418
11.3.2 Beispiel: "Mein erstes Formular"
419
11.3.3 Beispiel: Einfacher Dialog
421
11.3.4 Beispiel: Eine WinForms-Bibliothek
424
11.3.5 Beispiel: Ein einfacher Rechner
427
11.3.6 Beispiel: Daten anzeigen
432
11.3.7 Beispiel: Verwendung von GDI+ zur Grafikausgabe
435
11.4 Zusammenfassung
439
Windows Objekte: COM und WMI
440
12.1 COM in PowerShell verwenden
441
12.1.1 Windows-Automatisierung mit COM
443
12.1.2 Netzwerkzugriff, Office- Applikationen und Spielzeuge
455
12.1.3 Einsatz des ScriptControl-Objekts
466
12.1.4 Probleme mit COM
468
12.2 WMI und PowerShell
472
12.2.1 Was sind die WMI und was müssen wir beachten?
472
12.2.2 Das Get-WmiObject-Commandlet
473
12.2.3 Der WMI-Objektadapter
474
12.2.4 WMI-Elfmeterschießen – VBScript versus PowerShell
475
12.2.5 Die Shortcuts für WMI-Typen
480
12.2.6 Arbeiten mit WMI-Methoden
482
12.2.7 Arbeiten mit WMI-Events
484
12.2.8 Modifizierte WMI-Objekte zurückgeben
485
12.3 Welches Objektmodell sollte man verwenden?
487
12.4 Zusammenfassung
488
Sicherheit, Sicherheit, Sicherheit
490
13.1 Einführung in die Sicherheit
491
13.1.1 Was Sicherheit ist
491
13.1.2 Was Sicherheit nicht ist
491
13.1.3 Sicherheitsempfinden
491
13.2 Sicherheitsmodellierung
493
13.2.1 Einführung in das Modellieren von Bedrohungen
493
13.2.2 Klassifizieren von Bedrohungen mit dem STRIDE-Modell
494
13.2.3 Bedrohungen, Angriffsobjekte und Risiko-Minimierung
495
13.3 Absichern der PowerShell- Umgebung
499
13.3.1 Standardmäßige Sicherheit
499
13.3.2 Befehlspfad verwalten
500
13.3.3 Wahl der Ausführungs-Richtlinie für Skripte
501
13.4 Signieren von Skripten
503
13.4.1 Wie Public Key-Verschlüsselung und Hashing funktionieren
503
13.4.2 Signierende Autoritäten und Zertifikate
504
13.4.3 Erstellen eines selbst-signierten Zertifikats
505
13.4.4 Skripte mit einem Zertifikat signieren
509
13.4.5 Freigabe des Strong Private Key-Schutzes für Ihr Zertifikat
513
13.5 Sichere Skripte schreiben
516
13.5.1 Verwenden der SecureString-Klasse
517
13.5.2 Arbeiten mit Credentials
519
13.5.3 Vermeiden Sie Invoke-Expression
522
13.6 Zusammenfassung
525
PowerShell im Vergleich mit anderen Sprachen
528
A.1 PowerShell und CMD.EXE
528
A.1.1 Grundlegendes Navigieren und Dateioperationen
528
A.1.2 Variablen und Substitution
530
A.1.3 Befehle ausführen
532
A.1.4 Syntaktische Unterschiede
533
A.1.5 Textsuche: findstr und Select- String
534
A.1.6 Äquivalente für die For-Schleife
534
A.1.7 Batchdateien und Subroutinen
535
A.1.8 Den Prompt einstellen
537
A.1.9 Verwenden von doskey in PowerShell
538
A.1.10 Verwenden von cmd.exe in PowerShell
540
A.2 PowerShell und UNIX-Shells
541
A.2.1 Beispiel: Alle Prozesse anhalten
541
A.2.2 Beispiel: Stoppen einer gefilterten Prozessliste
542
A.2.3 Beispiel: Berechnen der Größe eines Verzeichnisses
542
A.2.4 Beispiel: Arbeiten mit dynamischen Werten
543
A.2.5 Beispiel: Die Lebenszeit eines Prozesses überwachen
544
A.2.6 Beispiel: Prüfen auf Pre-Release-Binärcode
544
A.2.7 Beispiel: Einen String in Großbuchstaben verwandeln
545
A.2.8 Beispiel: Text in einen String einfügen
545
A.3 PowerShell und Perl
546
A.4 PowerShell und C#
547
A.4.1 Aufruf von Funktionen und Befehlen
547
A.4.2 Methodenaufrufe
548
A.4.3 Rückgabe von Werten
548
A.4.4 Sichtbarkeit von Variablen
549
A.5 PowerShell und VBScript
549
Anhang B
552
Beispiele zum Administrieren
552
B.1 Active Directory-Infos abrufen
552
B.2 Installierte Software anzeigen
553
B.3 Terminal Server-Einstellungen bestimmen
554
B.4 Auflisten aller Hotfixes des aktuellen Computers
555
B.5 Computer mit fehlenden Hotfixes suchen
556
B.6 Ereignisprotokoll verwenden
559
B.6.1 Ein spezifisches EventLog-Objekt ermitteln
560
B.6.2 Das Ereignisprotokoll als Live-Objekt
560
B.6.3 Remote-Zugriff auf Ereignisprotokolle
561
B.6.4 Speichern von Ereignisprotokollen
562
B.6.5 Ereignisse schreiben
563
B.7 Arbeiten mit vorhandenen Dienstprogrammen
564
B.8 Arbeiten mit Active Directory und ADSI
566
B.8.1 Zugriff auf den Active Directory-Service
566
B.8.2 Benutzer hinzufügen
567
B.8.3 Benutzergruppe hinzufügen
568
B.8.4 User-Eigenschaften aktualisieren
570
B.8.5 User entfernen
571
B.9 Zusammenführen von zwei Datenmengen
572
Anhang C
574
Die PowerShell- Grammatik
574
C.1 Statement-Liste
574
C.2 Statement
575
C.2.1 Pipeline
575
C.2.2 Das if Statement
576
C.2.3 Das switch-Statement
577
C.2.4 Das foreach-Statement
577
C.2.5 Die for- und while-Statements
578
C.2.6 Die do/while- und do/until- Statements
578
C.2.7 Das trap-Statement
579
C.2.8 Das finally- Statement
579
C.2.9 Anweisungen zur Flusskontrolle
579
C.2.10 Funktionsdeklarationen
580
C.2.11 Parameterdeklarationen
580
C.3 Ausdruck
581
C.4 Wert
582
C.5 Tokenizer- Regeln
583
Index
586
© 2009-2024 ciando GmbH