Windows PowerShell 2.0 – Crashkurs - Die Onleihe

30

Transcript of Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Page 1: Windows PowerShell 2.0 – Crashkurs - Die Onleihe
Page 2: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis

Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Was lesen Sie in diesem Buch? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Wo gibt es die Beispiele? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Download, Installation und Systemvoraussetzungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Die PowerShell lernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Kontakt zum Autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Danksagungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1 Der erste Überblick über die (neue) PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Am Anfang war das Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Die PowerShell in 10 Minuten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Shell -ne Muschel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

In Zukunft zurück zum Keyboard? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Cmdlets statt Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Cmdlets und wie man mehr über sie erfährt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Alles dreht sich um Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Objekte versus Text in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Die Rolle der Objektpipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Über Umgang mit Objekten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Objekte besitzen Member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Member werden über einen Punkt angesprochen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Die Memberliste ist nicht statisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Objekte statt Text (Teil 2). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Ein weiteres Beispiel aus der Praxis – Platz schaffen auf der Festplatte. . . . . . . . . . . . . . . . . 43

PowerShell 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Die wichtigsten Neuerungen der Version 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Die PowerShell als die etwas modernere Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Die PowerShell für .NET-Entwickler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Die PowerShell aus Entwicklersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

Die PowerShell für andere Plattformen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Wo gibt es mehr? (PowerShell-Know-how) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Page 3: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

6 Inhaltsverzeichnis

2 PowerShell-Formalitäten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Installation und Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Das Windows Management Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Downloadformalitäten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Das Basisverzeichnis der PowerShell 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Die PowerShell starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Die PowerShell beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Kompatibilität zur Version 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Die Rolle der Profile-Dateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Die Variable $Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Die Rolle der Ausführungsrichtlinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Das Laden der Profile-Datei(en) verhindern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Eine Profile-Datei anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Ein Beispiel für eine Profile-Datei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Das Anlegen einer Protokolldatei (Start-Transcript). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Die Eingabezeile der Eingabeaufforderung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Sonderzeichen und ihre Bedeutung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Escape-Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Zeilenumbruch & Co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Die Eingabe von Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Individuelle Einstellungen vornehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Die Vorder- und Hintergrundfarbe des Host-Fensters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Die Titelleiste des Fensters einstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Die Größe des Eingabeaufforderungsfensters verändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Vorder- und Hintergrundfarbe bei Meldungstypen einstellen . . . . . . . . . . . . . . . . . . . . . . . . 71 Den Eingabeprompt gestalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Die Hilfetexte individuell durchsuchen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Hilfethemen drucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Die Integrated Scripting Environment (ISE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Syntaxeinfärbung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Integrierter Debugger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Ein- und Ausgabebereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Die PowerShell ISE ist erweiterbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

3 Cmdlets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Cmdlets kennen lernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Welche Cmdlets sind an Bord? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Alles über ein Cmdlet erfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Cmdlets nach Snap-Ins gruppieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Die Rolle der Aliase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

Page 4: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 7

Einen neuen Alias anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Kleine Nachteile von Aliasen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Aliase exportieren und importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Aliase wieder entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

Cmdlets und ihre Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Die Common Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Mehr über einen Parameter erfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Die wichtigsten Cmdlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Das Get-Date-Cmdlet (kein Alias) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Das Get-Command-Cmdlet (Alias Gcm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Befehle in einer Zeichenkette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Das Get-Help-Cmdlet (kein Alias) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Die Syntaxbeschreibung zu einem Cmdlet abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Parameterhilfe abrufen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Allgemeine Hilfethemen abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Onlinehilfe abrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Das Get-Member-Cmdlet (Alias Gm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Das Select-Object-Cmdlet (Alias Select) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Die Anzahl der Pipeline-Elemente eingrenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Das Where-Object-Cmdlet (Alias ?). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Das Group-Object-Cmdlet (Alias Group). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Collection-Properties erweitern mit dem ExpandProperty-Parameter . . . . . . . . . . . . . . . . 96 Gruppieren mit berechneten Spalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Das Sort-Object-Cmdlet (Alias Sort) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Sortieren mit berechneten Spalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Das Get-Unique-Cmdlet (Alias Gu) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Das ForEach-Object-Cmdlet (Alias %) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Das Out-String-Cmdlet (kein Alias) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Text als Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Das Measure-Object-Cmdlet (Alias Measure) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Den Pipeline-Inhalt in eine Datei umleiten (Out-File und Tee-Object) . . . . . . . . . . . . . . . 102

Cmdlets-Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

4 Ad-hoc-Abfragen lokal und im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Lokal und im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Umgang mit Prozessen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Laufende Prozesse holen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Prozesse beenden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Prozesse starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Page 5: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

8 Inhaltsverzeichnis

Prozesse termingesteuert starten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Die Besitzer eines Prozesses auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Der Umgang mit Diensten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Dienste auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Weitere Details zu einem Dienst auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 PowerShell oder Sc.exe? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Einen Dienst anhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Einen Dienst beenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Einen Dienst fortsetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Dienste anhand einer Liste prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Ein kurzer Ausflug in die Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Einzelne Eigenschaften eines Dienstes ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Was genau liefert Get-Service? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Die Zugriffsberechtigungen eines Dienstes in Erfahrung bringen . . . . . . . . . . . . . . . . . . . . . 119 Einen neuen Dienst einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Ein (kurzer) Blick hinter die Kulissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Einen Dienst entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Der Umgang mit dem Ereignisprotokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Neuerungen bei Vista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Ereignisprotokolleinträge anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Einen Eintrag schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Das Löschen eines Ereignisprotokolls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Das Get-WinEvent-Cmdlet als moderne Alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Der Zugriff auf die Registry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Der Registry-Provider der PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Schlüssel auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Die Einträge eines Schlüssels auflisten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Einen neuen Schlüssel anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Einen Schlüssel entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Einen neuen Eintrag anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Einen Schlüssel verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Den Standardwert eines Schlüssels ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Aliase statt Cmdlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Feststellen, ob ein Schlüssel existiert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Mit dem Rückgabewert eines Get-Item arbeiten (das RegistryKey-Objekt) . . . . . . . . . . . . 132 Suchen in der Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Die Suche mit [Microsoft.Win32]::RegistryKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Umgang mit Registry-Berechtigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Remotezugriff auf die Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Die Ergebnisse einer Abfrage anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Das Format-Table-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Gruppieren der Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Page 6: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 9

Eigene Spalten definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Das Format-List-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Einfache Ausgabe mit Format-Wide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Fensterausgaben mit Out-GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Abfrageergebnisse exportieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Export in das Textformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Export in das CSV-Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Export in das HTML-Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Export in das XML-Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Abfrageergebnisse visualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

5 Umgang mit Dateien, Verzeichnissen und Laufwerken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Alles ist ein Item (oder die Rolle der Provider) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

Provider und Laufwerke auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Allgemeines über die Item-Cmdlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Die Rolle der Item-Aliase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Die Parameter WhatIf und Confirm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Transaktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Der Umgang mit Laufwerken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Laufwerksabfragen per WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Laufwerksabfragen per DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Laufwerksabfragen per FileSystemObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Netzwerklaufwerke auflisten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Neue Laufwerke anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Der Umgang mit Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Operationen mit Platzhaltern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

Der Umgang mit Verzeichnissen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Zwischen Dateien und Verzeichnissen unterscheiden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Die Größe aller Dateien in einem Unterverzeichnis feststellen. . . . . . . . . . . . . . . . . . . . . . . . 159

Umgang mit Pfaden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Standardoperationen mit Dateien und Verzeichnissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Dateien anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Verzeichnisse anlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Ein Element in einem Container ansprechen mit Get-Item (Alias gi). . . . . . . . . . . . . . . . . . 162 Den Inhalt eines Containers auflisten mit Get-ChildItem (Aliase dir, gci und ls) . . . . . . . 163 Dateien und Verzeichnisse kopieren mit Copy-Item (Alias cp) . . . . . . . . . . . . . . . . . . . . . . . 164 Verschieben mit Move-Item (Alias mv) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Umbenennen mit Rename-Item (Alias ren). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Löschen mit Remove-Item (Alias rm) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Dateien suchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Dateien aufräumen mit der PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Page 7: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

10 Inhaltsverzeichnis

Der Umgang mit (Zip-)Archiven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Der Umgang mit Dateiattributen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

Dateiattribute zuweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Der Umgang mit Datei- und Verzeichnisberechtigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Allgemeines zum Thema Zugriffsberechtigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Zugriffsberechtigungen setzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Die Cmdlets Get-Acl und Set-Acl (keine Aliase) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Eine übersichtlichere Form von Get-Acl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Den Besitzer eines Objekts abfragen und setzen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

Umgang mit Freigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Freigaben auflisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Freigaben anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Zugriffsberechtigungen bei Freigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

6 Umgang mit Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Zahlen und Datumsangaben formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Textdateien lesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Lesen von Binärdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Get-Content liest nicht nur Dateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Textdateien schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Dateien zusammenfügen mit Add-Content (Alias ac) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Den Inhalt einer Datei löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

Umgang mit CSV-Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Texte und Textdateien durchsuchen mit Select-String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

Das Select-String-Cmdlet im Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Reguläre Ausdrücke in zehn Minuten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Ein wenig Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Die Rolle der Zeichengruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Die Rolle der Quantifizierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Reguläre Ausdrücke bei der PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Das Select-String-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Der Match-Operator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Der Replace-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Der [Regex]-Type Accelerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Weitere Beispiele aus der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 E-Mail-Adressen ausfiltern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Expresso hilft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222

Die String-Operatoren Join und Split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Die String-Klasse und ihre Member . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Page 8: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 11

Umgang mit XML-Daten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 XML-Daten über den [Xml]-Type Accelerator einlesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 XML-Daten aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Das ConvertTo-XML-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Die Cmdlets Export-Clixml und Import-Clixml. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

7 PowerShell-Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Was man für den Anfang wissen muss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Skripts erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Sicherheitseinstellungen für die Skriptausführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Skripts starten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Skripts zeitgesteuert starten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Skripts mit einem anderen Benutzerkonto starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Kurze Einführung in PowerShell Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Kommentarzeilen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Eingaben entgegennehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Zeichenketten (Strings) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Arrays (Arrayvariablen) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Hashtables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Die Rolle des Befehlsblocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Entscheidungen mit dem if-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Mehrfachentscheidungen über den switch-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Schleifenbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Funktionen mit Parametern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Mit dem Break-Befehl eine Funktion vorzeitig verlassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Funktionen mit Pipeline-Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Ein Touch-Befehl als Beispiel für eine richtige Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Wie machen es die Profis? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

8 PowerShell-Skripts für etwas Fortgeschrittene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Skripts mit Argumenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

Die Args-Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Der param-Befehl für Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 In ein Skript pipen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

Erweiterte Funktionen (Advanced Functions). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Der Aufbau einer erweiterten Funktion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Parameterattribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Implementieren einer Hilfe für eine Funktion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

Page 9: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

12 Inhaltsverzeichnis

Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Nicht terminierende und terminierende Fehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Fehlerbehandlung bei Cmdlets – der ErrorAction-Parameter . . . . . . . . . . . . . . . . . . . . . . . . 285 Die Basis für eine Fehlermeldung – das ErrorRecord-Objekt . . . . . . . . . . . . . . . . . . . . . . . . . 286 Die Fehlerbehandlung mit try und catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Allgemeines zur Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Skripts debuggen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Variablenwerte betrachten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Die Debugger-Cmdlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Alternativen zur ISE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

9 Windows Management Instrumentation (WMI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 WMI in 10 Minuten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

Die ersten Schritte mit WMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 WMI-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 WMI-Instanzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Das ManagementObject-Objekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Die PowerShell-Unterstützung auf einen Blick. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Umstellen von WSH-Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Ein Blick hinter die Kulissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

WMI-Abfragen mit Get-WmiObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Hardware- und Softwarekonfigurationsdaten abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

WMI in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Daten über das Betriebssystem abfragen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Daten über den Computer abfragen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Daten über die Netzwerkadapter abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Eine Freigabe mit Berechtigungen anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

WMI-Spezialitäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 WMI im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Konvertieren von WMI-Datumswerten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 WMI-Abfragen über Assoziationsklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 WMI-Abfragen über Referenzklassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 WMI-Eigenschaften schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Auf WMI-Properties einzeln zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Direkter Aufruf von WMI-Methoden mit Invoke-WmiMethod . . . . . . . . . . . . . . . . . . . . . . 329 WMI-Instanzen entfernen über Remove-WmiObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Eine WMI-Instanz anlegen über Set-WmiInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 WMI-Abfragen als Job. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Umgang mit WMI-Berechtigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

Page 10: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 13

Die WMI Type Accelerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 [WMI] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 [WMIClass] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 [WMISearcher]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

Umgang mit WMI-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Die Cmdlets für den Umgang mit Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Das Register-WmiEvent-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Warten auf den Start eines Prozesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Die Registry überwachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 USB-Laufwerksüberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

WMI über WS-Man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 WMI-Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

Wbemtest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 WMI-Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

10 Active Directory und Gruppenrichtlinien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 PowerShell und Active Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 Active Directory-Verwaltung per [ADSI] und [ADSISearcher] . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

Die ersten Schritte mit [ADSI] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Anmelden an eine Domäne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Die Rolle der Container . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Ein einzelnes Verzeichnisobjekt über seinen LDAP-Pfad ansprechen . . . . . . . . . . . . . . . . . 356 Ein Blick hinter die Kulissen – Adapted Views und die Wunder des Extended Type Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Die DirectoryEntry-Klasse repräsentiert ein Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Zugriff auf ein einzelnes Attribut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Zugriff auf einen Container – das DirectoryEntries-Objekt. . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Umgang mit Benutzern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Einfache Aufgaben in Active Directory mit [ADSI] erledigen. . . . . . . . . . . . . . . . . . . . . . . . . 366 Gruppen rekursiv durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Die Suche in einer Domäne (Suchen nach Benutzerkonten) . . . . . . . . . . . . . . . . . . . . . . . . . . 376 LDAP in zehn Minuten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

Active Directory-Verwaltung mit den Cmdlets von Quest (Management Shell for AD) . . . . . 386 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Die Rolle des Identity-Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Die ersten Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 Anmelden an eine Domäne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Einen Benutzer anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Attribute nachträglich ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Benutzer löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Gruppen anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

Page 11: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

14 Inhaltsverzeichnis

Benutzer zu Gruppen hinzufügen und entfernen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Organisationseinheiten anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Die Mitglieder einer OU auflisten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Operationen mit Computerkonten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Die Quest-Cmdlets im Zusammenspiel mit PowerGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

Active Directory-Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Wenn eine Anmeldung erforderlich ist – der DirectoryContext . . . . . . . . . . . . . . . . . . . . . . 395 Den RootDSE ansprechen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Alle Domänen in einem Forest auflisten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Einen Forest ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Die Domäne ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Den Domänencontroller ansprechen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Den globalen Katalog ansprechen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Suchen im globalen Katalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

Die Cmdlets aus dem ActiveDirectory-Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Die Remote Server-Verwaltungstools für Windows 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Das ActiveDirectory-Modul im Rahmen einer Remote-Session nutzen . . . . . . . . . . . . . . . 401 Auflisten von Benutzern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Anlegen eines neuen Benutzers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Einen Benutzer ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

Umgang mit Gruppenrichtlinien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Ein wenig Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Die Berechtigungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Lokale Benutzerkonten verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Anlegen eines lokalen Benutzerkontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Entfernen eines lokalen Benutzerkontos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 WMI als Alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

11 Remoting mit der PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 Grundlagen und Voraussetzungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

Remoting-Konfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 WS-Man in zehn Minuten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Remoting-Troubleshooting-Tipps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Ein (letztes) Wort zu SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

Umgang mit Remotesessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Einrichten und Start einer neuen Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Eine Session importieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Eine Session exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

Der WSMan-Provider der PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Aufruf von WSMan-Webservicefunktionen über Invoke-WSManAction . . . . . . . . . . . . . 423 Cmdlets mit einem ComputerName-Parameter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

Page 12: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 15

PowerShell-Remoting in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 Das Invoke-Command-Cmdlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 Einrichten einer Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

12 Systemaufgaben mit der PowerShell lösen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Befehlszeilentools aufrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 COM-Komponenten ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

Anlegen einer Verknüpfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 MSI-Dateien durchsuchen (und eine kleine Typnachhilfe für die PowerShell). . . . . . . . . 432

Datenbankinhalte ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Eine Datenbank anlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Eine Datenbank aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Eine Datenbank abfragen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442

Diverse Kleinigkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 Ini-Dateien lesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Dateien kopieren per BITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 E-Mails versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Dateien aus dem Internet herunterladen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Umgang mit Hexadezimalzahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Bestätigungsboxen anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Properties und Methoden indirekt ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

Der Umgang mit Umgebungsvariablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

13 PowerShell 2.0 für (etwas) Fortgeschrittene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 .NET-Funktionen aufrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

Shared-Methoden und Instanzenmethoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 Umgang mit Konstantenlisten (Enumerationen) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 .NET-Assemblys nachladen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464

Umgang mit Modulen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Die Rolle des Modulmanifests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Module laden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Ein Beispiel aus der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 Anlegen eines Binary Moduls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Module als (neuer) PowerShell-Erweiterungsmechanismus . . . . . . . . . . . . . . . . . . . . . . . . . . 471

Neue Typen und Objekte definieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Neue Typen über Add-Type definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

Der Gültigkeitsbereich von Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Ein erstes Beispiel zum Thema Gültigkeitsbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 Die Rolle der Gültigkeitsbereichsmodifizierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

Page 13: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

16 Inhaltsverzeichnis

Regeln für den Gültigkeitsbereich von Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Den Scope individuell festlegen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

Das Geheimnis der Parameterbindung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Windows PowerShell ISE erweitern. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 Diverse Kleinigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

Eine Hashtable als Funktionsparameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 Den ?:-Operator nachbauen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Die Ausführungsgeschwindigkeit eines Cmdlets messen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 64 Bit? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486

14 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Ps1-Dateien und der Doppelklick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Die Rolle der Ausführungsrichtlinie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Umgang mit Zertifikaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 Skriptdateien signieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

Anlegen eines Zertifikats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 Signieren eines Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

Sichere Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 Anlegen eines PSCredential-Objekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Speichern eines SecureStrings in eine Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 Einen SecureString in ein reguläres String-Objekt konvertieren . . . . . . . . . . . . . . . . . . . . . . 497 Einen SecureString über ein PSCredential-Objekt lesbar machen. . . . . . . . . . . . . . . . . . . . . 497 Dateien verschlüsseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

15 PowerShell-Erweiterungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Die Rolle der Snap-Ins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502

Snap-Ins müssen registriert werden. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 Das PowerShell Pack für Windows 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Die PowerShell Community Extensions (PSCX) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 TabExpansion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 PowerGUI und PowerGUI Script Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Benutzeroberflächen mit PrimalForms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510

Der erste Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 Die Rolle der Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 Aus dem Formular wird ein PowerShell-Skript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Ein kleines Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

Die wichtigsten PowerShell-Erweiterungen auf einen Blick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520

Page 14: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Inhaltsverzeichnis 17

16 Spaß mit der PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Die sprechende Shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Power-Musik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Quote of the day. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 PowerShell-Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 Das Game of Life mit der PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Denke wie die PowerShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533

Anhang A – Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

Anhang B – Stapeldateien umstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 Ein erster (Rück-)Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Tipps für eine (mögliche) Umstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545

Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 Eingabe von Werten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546

Parameterübergabe an eine Stapeldatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Aufruf weiterer Stapeldateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 Fehlerbehandlung mit ERRORLEVEL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Wiederholungen mit FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Verarbeiten von Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 Die Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551

Ein abschließendes Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

Anhang C – Das Prinzip der Typenerweiterung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Die Grundlage für Typenerweiterungen – die Typendefinitionsdateien . . . . . . . . . . . . . . . 557 Eigene Typendefinitionserweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557

Anhang D – Die PowerShell bei Microsoft Server-Produkten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Exchange Server 2007. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 SQL Server 2008. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 SharePoint 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567

Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

Page 15: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

197

Kapitel 6

Umgang mit Text

In diesem Kapitel: Zahlen und Datumsangaben formatieren 198 Textdateien lesen und schreiben 200 Umgang mit CSV-Daten 203 Texte und Textdateien durchsuchen mit Select-String 205 Reguläre Ausdrücke in zehn Minuten 209 Die String-Operatoren Join und Split 223 Die String-Klasse und ihre Member 224 Umgang mit XML-Daten 225 Zusammenfassung 230

Page 16: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

198 Kapitel 6: Umgang mit Text

Umgang mit Text hört sich nicht gerade spannend an, doch geht es natürlich in diesem Kapitel nicht um Prosa, Poesie und Versmaß, sondern um das Auswerten jenes Textes, der z. B. in Ereignisprotokollen enthal-ten ist. Besteht die Aufgabenstellung z. B. darin, dass einige MB an Logdateien gezielt nach Einträgen durchsucht werden sollen, ist die PowerShell dafür das ideale Werkzeug. In diesem Kapitel steht daher auch eine praxisorientierte Einführung in den Umgang mit regulären Ausdrücken auf dem Plan, die nicht nur bei der PowerShell die Grundlage für die gesamte Textverarbeitung darstellen. Reguläre Ausdrücke sind nur scheinbar nichts für PowerShell-Anfänger. Wer als angehender PowerShell-Anwender mit einer Konstruk-tion ^TCP\s+(?<Port>[0-9]{2,5})\s+[0-9]{1,3}\. konfrontiert wird, verspürt in der Regel kein allzu großes Verlangen, mehr über die Geheimnisse dieser etwas seltsamen Konstruktionen (dabei war dies noch ein relativ einfacher regulärer Ausdruck) zu erfahren – am Ende dieses Abschnitts wissen Sie, was sich dahinter verbirgt und werden ähnliche Ausdrücke bereits an kleinen Beispielen angewendet haben. Das Kapitel beginnt mit einem eher harmlosen Thema, dem allgemeinen Umgang mit Textdateien.

Zahlen und Datumsangaben formatieren Formatieren hat in diesem Zusammenhang nichts mit der Festplatte zu tun, sondern bedeutet im ursprüng-lichsten Sinne des Begriffs »etwas in eine Form« bringen. Konkret geht es darum, dass Zahlen und Datums-/ Zeitangaben auf eine bestimmte Art und Weise (in einem bestimmten) Format in eine Zeichenkette einge-fügt werden. Dies erledigt bei der PowerShell der f-Operator. Der Operator wirkt am Anfang eventuell ein wenig sperrig, ist aber wie fast alles bei der PowerShell sehr einfach gestrickt. Ausgangspunkt ist in der Regel eine Zeichenkette, in die etwas eingesetzt werden soll. Der folgende Befehl fragt zunächst über das Get-PSDrive-Cmdlet den freien Speicherplatz auf Laufwerk C: ab und weist das Resultat einer Variablen zu. Diese Variable soll anschließend im Rahmen einer Zeichen-kette ausgegeben werden:

$Frei = (Get-PSDrive C).Free PS > "Freier Platz auf Laufwerk C: $Frei" Freier Platz auf Laufwerk C: 906027008

In diesem Beispiel wird die Zahl unformatiert eingesetzt, was unter anderem zur Folge hat, dass die Zahl keine Tausendertrennzeichen erhält. Soll die Zahl formatiert aufgenommen werden, muss in die Zeichen-kette anstelle der Variablen ein Formatierungsplatzhalter integriert werden, der aus einer in geschweiften Klammern gesetzten Zahl besteht. Diese beginnt bei 0, kann maximal 9 betragen und deren Position gibt an, welche Werte der f-Operator an welche Stelle innerhalb der Zeichenkette einfügt:

PS > "Freier Platz auf Laufwerk C: {0}" -f $Frei Freier Platz auf Laufwerk C: 906027008

Doch warum sieht die Zahl immer noch so aus wie im letzten Beispiel? Weil zwar der f-Operator zum Einsatz kam, aber noch keine Formatierungsanweisung. Diese wird in Gestalt einer Buchstaben-/Zahlen-kombination in den Platzhalter hinter einen Doppelpunkt eingefügt:

"Freier Platz auf Laufwerk C: {0:n0}" -f $Frei Freier Platz auf Laufwerk C: 906.027.008

Page 17: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Zahlen und Datumsangaben formatieren 199

Der Formatierungsbezeichner n:0 steht für Numerischer Wert mit 0 Nachkommastellen. Es gibt eine ganze Reihe solcher Buchstaben, die der f-Operator als Formatierungsanweisungen erkennt, von denen die wich-tigsten in Tabelle 6.1 zusammengestellt sind (eine vollständige Liste finden Sie leider nicht in der PowerShell-Hilfe, sondern in der Referenz zum .NET Framework, auf dem die PowerShell aufsetzt). Im nächsten Beispiel soll die Ausgabe dahingehend erweitert werden, dass aus der Größe des belegten Speichers die Laufwerksgröße und die Belegung in Prozent berechnet und alle drei Angaben über den f-Operator in die Zeichenkette eingesetzt werden. Zuerst werden drei Variablen mit Werten belegt:

$Frei = (Get-PsDrive C).Free $Belegt = (Get-PsDrive C).Used $Gesamt = $Frei + $Belegt

Anschließend werden die beiden Variablen in eine Zeichenkette formatiert eingesetzt:

"Auf Laufwerk C: sind {0:n0} Bytes von {1:n0} Bytes belegt ({2:p})" -f $Belegt, $Gesamt, ($Belegt/$Gesamt)

Die Reihenfolge der Platzhalter muss nicht aufsteigend sein. Genauso kann ein Platzhalter auch mehrfach vorkommen. Bislang wurden die Größenangaben in Byte ausgegeben, MB wäre etwas praktischer. Das lässt sich nicht über einen Formatierungsbezeichner, sondern einfach durch Division des einzusetzenden Wertes erreichen:

"Auf Laufwerk C: sind {0:n0} MB von {1:n0} MB belegt ({2:p})" -f ($Belegt/1MB),($Gesamt/1MB),($Belegt/$Gesamt) Auf Laufwerk C: sind 60.191 MB von 61.055 MB belegt (98,59%)

Zum Schluss soll auch die aktuelle Uhrzeit in die Zeichenkette eingesetzt werden. Vor allem für die Da-tums-/Uhrzeitformatierung existieren eine Vielzahl von Formatierungsbezeichnern, die aber auch alternativ dem Format-Parameter des Get-Date-Cmdlets übergeben werden können:

"Um {3:HH:mm} sind auf Laufwerk C: {0:n0} MB von {1:n0} MB belegt ({2:p})" -f ($Belegt/1MB),($Gesamt/1MB),($Belegt/$Gesamt), (Get-Date) Um 11:48 sind auf Laufwerk C: 60.191 MB von 61.055 MB belegt (98,59%)

Abbildung 6.1 Der f-Operator setzt Zahlen und Datums-/Zeitwerte formatiert in Zeichenketten ein

Page 18: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

200 Kapitel 6: Umgang mit Text

Formatierungszeichen Bedeutung

c (oder C) Währungsformat

d Kurzes Datumsformat (Tag.Monat.Jahr vierstellig)

D Langes Datumsformat (z. B. Montag, 21. Dezember 2009)

ddd Wochentag kurz (z. B. Mo)

dddd Wochentag lang

e (oder E) Wissenschaftliche Darstellung einer Zahl

HH Stunden im 24-Stunden-Format

hh Stunden im 12-Stunden-Format

mm Minuten

MM Monat als Zahl

MMM Monat kurz (z. B. Dez)

MMMM Monat voll ausgeschrieben

n Numerischer Wert mit Nachkommastellen, die Anzahl an Nachkommastellen folgt direkt hinter dem »n«, z. B. »n2« für 2 Nachkommastellen

p (oder P) Prozentangabe

s Datum und Zeit, getrennt durch den Buchstaben »T«: Jahr-Monat-TagTStunde:Minute-Sekunde

ss Sekunden

t Kurzes Zeitformat (Uhrzeit:Stunde)

T Langes Zeitformat (Uhrzeit:Stunde:Sekunde)

x (oder X) Als Hexadezimalzahl

Y Monat voll ausgeschrieben und Jahr vierstellig

yy Jahreszahl zweistellig

yyyy Jahreszahl vierstellig

Tabelle 6.1 Wichtige Formatierungszeichen für den f-Operator

Textdateien lesen und schreiben Für das Lesen von Textdateien gibt es das Get-Content-Cmdlet (die Aliase sind type, cat und gc). Es legt den Inhalt einer Textdatei als ein Array von String-Objekten in die Pipeline. Das Cmdlet besitzt eine Reihe interessanter Parameter, wie z. B. TotalCount, über den sich die Anzahl der Zeilen festlegen lässt, die eingele-sen werden sollen.

Page 19: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Textdateien lesen und schreiben 201

Der folgende Befehl gibt den Inhalt einer Datei Zeile für Zeile aus. Für jede Zeile wird ein String-Objekt über die Pipeline weitergegeben:

Get-Content -Path $Env:SystemRoot\Win.ini

Der folgende Befehl liest lediglich die erste Zeile der Datei:

Get-Content -Path $Env:SystemRoot\Win.ini -TotalCount 1

Möchte man eine bestimmte Zeile lesen, ist dies ebenfalls kein Problem, da sich die eingelesenen Zeilen über die Arrayschreibweise, also mit einem eckigen Klammerpaar, das den Index des anzusprechenden Wertes enthält, auch einzeln ansprechen lassen. Der folgende Befehl liest nur die vierte Zeile:

(Get-Content -Path $Env:SystemRoot\Win.ini)[3]

Das Lesen der letzten Zeile der Datei ist auch möglich, allerdings nicht ganz so elegant, da der Dateiinhalt erst einer Variablen zugewiesen werden muss, um die Anzahl der Elemente erhalten zu können:

$Zeilen = (Get-Content -Path $Env:SystemRoot\Win.ini);$Zeilen[$Zeilen.Length-1]

Doch die PowerShell bietet einen kleinen Trick, den auch erfahrene PowerShell-Anwender nicht unbedingt kennen. Über einen negativen Index kann die Zählweise am Dateiende begonnen werden. Der folgende Befehl liest die letzte Zeile der Datei Win.ini ein:

(Get-Content -Path $Env:SystemRoot\Win.ini)[-1]

HINWEIS Spielt der Zeichensatz eine Rolle, kommt der Encoding-Parameter ins Spiel.

Der folgende Befehl liest eine ASCII-Datei, das heißt, jedes Zeichen wird als 8-Bit-ASCII-Zeichen behandelt:

Get-Content -Path $Env:SystemRoot\Win.ini -Encoding ASCII

Sollte die Datei Umlaute und ß enthalten, werden diese jetzt nicht richtig dargestellt.

Lesen von Binärdateien Get-Content kann auch Binärdateien lesen (also Dateien, deren Inhalt nicht als Text interpretiert werden soll). In diesem Fall wird jedes einzelne Byte als Zahlencode zurückgegeben und nicht als Zeichen interpre-tiert. Dazu muss über den Encoding-Parameter lediglich Byte angegeben werden. Der folgende Befehl gibt die ersten beiden Bytes einer Bmp-Datei im Hexformat aus:

Get-Content -Path Bild.bmp -Encoding Byte -Totalcount 2 | ForEach-Object { "{0:x}" -f $_ }

Page 20: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis

#requires -version 2.0 341 $?-Variable 293 $Args-Variable

Argumentübergabe 276 $ErrorActionPreference-Variable 286 $Error-Variable 287 $ErrorView-Variable 295 $Host.PrivateData

Farbeinstellungen ändern 296 $Input-Variable 277 $MaximumErrorCount-Variable 287 $MyInvocation

Skriptpfad ermitteln 526 $Profile-Variable 59, 61 $PSEmailServer-Variable 449 $PSHome-Variable 56 $PSISE

PowerShell ISE erweitern 481 $PSScriptRoot-Variable 470 $PSVersionTable 58 $this

ScriptProperty 472 .NET Framework

Definition 460 Funktionen aufrufen 460

.NET Klassenbibliothek 460

.NET-Assemblys Nachladen 464

.Ps1Xml-Dateien 468

.Psd1-Dateien 468

.Psm1-Dateien 468 [ADSI]

Ein Blick hinter die Kulissen 356 [ADSI]-Type Accelerator 351 [ADSISearcher]-Type Accelerator 351, 377 [ref]

Variablen als Parameter 263 [Regex]-Type Accelerator 214 [WMI] 334 [WMIClass] 334 [WMISearcher] 334, 337 [Xml]-Type Accelerator 225

A

Access Control Entry (ACE) 183 Access Control List

Definition 183 ACE Siehe Access Control List Active Directory

Administration 395 Bei der PowerShell 350 Benutzer anlegen 367 Die Rolle der Container 355 Elemente über LDAP ansprechen 356 Kennwort für Benutzer setzen 369 OU anlegen 375 Suche mit [ADSISearcher] 376 Umgang mit Benutzern 362

Active Directory Schema Editor 366 Active Directory Web Services 400 ActiveDirectory-Modul

ActiveDirectory-Provider 403 Überblick 400

ActiveDirectoryPartition-Klasse 395 ActiveDirectorySchema-Klasse 395 ActiveDirectorySite-Klasse 395 ActiveRoles Management Shell for Active Directory

Siehe Quest-Cmdlets Adapted View

Actiive Directory-Zugriffe 358 Add-BitsFile-Cmdlet 445 Add-Content-Cmdlet 161 Add-PSSnapin-Cmdlet 502 Add-QADPermission-Cmdlet

Quest 390 Add-SDMgplink-Cmdlet

SDM 404 Add-SDMgpoSecurity-Cmdlet

SDM 404 Add-SDMSOMSecurity-Cmdlet

SDM 404 Add-SDMWMIFilterLink-Cmdlet

SDM 404

Page 21: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

570 Stichwortverzeichnis

Add-Type-Cmdlet 473 ADFind

Suche im Active Directory 386 ADSI

Bei der PowerShell 352 Advanced Functions Siehe Erweitertere Funktionen ADWS Siehe Active Directory Web Services Alias

Anlegen 80 Definition 79 Entfernen 81 Exportieren/Importieren 80

Alias-Parameterattribut 280 AllowEmptyCollection-Parameterattribut 280 AllowEmptyString-Parameterattribut 280 AllowNull-Parameterattribut 280 Anführungszeichen

Unterschied zu Apostrophe 247 Apostrophe

Unterschiede zu Anführungszeichen 247 Arrays

Definition 249 Assemblybibliothek

Eigene laden 465 Klassen zählen 466

Assoziationsklasse WMI 326

Attribut Definition 279

Ausführungsbereiche Definition 74

Ausführungsrichtlinie 488 Über Gruppenrichtlinien verteilen 236

Autovervollständigung Tab-Taste 67

B

Background Intelligent Transfer Service Siehe BITS Beep-Methode

Console-Klasse 522 Befehlsblock

Definition 255 Befehlszeilenpuffer

Über F7 abrufen 66 Benutzerverwaltung

Lokale Benutzerkonten 407 Berechtigungen

Kopieren 189 Bereichsoperator 250

Besitzer bei Verzeichnissen und Dateien 189

Binärdateien einlesen 201

Binärmodul Überblick 468

Binary Modul Anlegen 471

BITS Background Intelligent Transfer Service 445

BitsJob-Klasse BITS 447

Bor-Operator PowerShell 182

break-Befehl 268 Beim trap-Befehl 290

Bxor-Operator PowerShell 182

C

C# Vergleich zur PowerShell 49

Canonical Name 382 Casting Siehe Type Casting catch-Befehl 291 CategoryInfo-Property 287 cert-Laufwerk 490 Cimv2-Namespace

WMI 305 Clear-EventLog-Cmdlet 123, 124 Cmdlet

Definition 32 Die wichtigsten Cmdlets 83 Pararameter 81 Syntaxbeschreibung abrufen 89 Überblick 78 Umgang mit Fehlern 103

CmdletBinding-Attribut 281 CmdletBinding-Parameterattribut 280 Collection

Definition 114 Collection-Member 114 COMException Siehe HResult-Fehlercode COM-Komponente 431

Fehlercode abfragen 295 Commamdlet Siehe Cmdlet Common Language Runtime (CLR) Siehe

.NET Framework Complete-BitsTransfer-Cmdlet 446

Page 22: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis 571

Concatenate-Parameter Set-Item 414 Set-Item-Cmdlet 414

ConfirmImpact-Property 280 Confirm-Parameter 151 ConfirmPreference-Variable 171 Connect-QADService-Cmdlet

Quest 390 Connect-WSMan-Cmdlet 345, 422 Console-Klasse

Beep-Methode 522 continue-Befehl

Trap-Befehl 289 ConvertFrom-SecureString-Cmdlet 496 Convert-Path-Cmdlet 160 ConvertTo-Html-Cmdlet 144 ConvertTo-SecureString-Cmdlet 496 ConvertTo-XML-Cmdlet 227 Copy-Item-Cmdlet 164 CredSSP

Definition 423 CSV-Datei

Umgang mit CSV-Dateien 203 CSV-Format 143

D

Datei Attribute lesen und setzen 179

Dateiattribute Umgang 179

Dateien Anlegen 161 Aus dem Internet laden 452 Kopieren 164 Suchen 172 Umgang mit der PowerShell 157 Verschlüsseln mit einem SecureString 498

Dateisuche als Job 172

Datums-/Zeitangaben Formatieren 198

DCOM Konfiguration für WMI 324

Debuggen Von Skripts 296

DefaultParameterSetName-Property 280 Dialogboxen

Anzeigen 455

Dir /s Ersatz bei der PowerShell 173

DirectoryContext-Klasse 395 DirectoryContext-Objekt

Active Directory-Verwaltung 395 DirectoryEntry-Klasse 359, 361 DirectorySearcher-Klasse 377 Disable-PSBreakPoint-Cmdlet 299 Disable-PSRemoting-Cmdlet 413 Disable-QADUser-Cmdlet

Quest 390 Disable-WSManCredSSP-Cmdlet 345, 422 Disconnect-WSMan-Cmdlet 345, 422 Discretionary Access Control List (DACL) 183 Distinguished Name (DN)

Active Directory 352 do-Befehl 263 DomainController-Klasse 395 Domain-Klasse 395 Domäne

Active Directory, anmelden 355 Ansprechen 398

Domänencontroller Ansprechen 398

Dotsourced Siehe Skripts DriveInfo-Klasse

Laufwerksinformationen abfragen 154 Dynamischer Parameter 414 Dynamisches Modul

Überblick 468

E

Eingabeprompt modifizieren 71

else-Befehl 256 elseif-Befehl 257 E-Mail

Versenden 449 E-Mail-Adressen

Über reguläre Ausdrücke filtern 221 Enable-PSBreakPoint-Cmdlet 299 Enable-PSRemoting-Cmdlet 413 Enable-WSManCredSSP-Cmdlet 345, 422 Enter-PSSession-Cmdlet 418 Entscheidung

if-Befehl 256 Enumerationen Siehe Konstantenlisten Enumerationskonstanten

Werte auflisten 286

Page 23: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

572 Stichwortverzeichnis

Ereignisprotokoll Überblick 121

ErrorAction-Parameter 285 ErrorBackgroundColor

Farbe der Fehlermeldung ändern 296 ErrorDetails-Property 287 ErrorForegroundColor

Farbe der Fehlermeldung ändern 296 ErrorLevel

Bei der PowerShell 295 ERRORLEVEL 547 ErrorRecord-Objekt 286 ErrorVariable-Parameter 293 Erweiterte Funktionen

Überblick 278 Escape-Zeichen 68 EventlogEntry-Objekt 121 Excecution policy Siehe Ausführungsrichtlinie Exception

Definition 287 Exception-Property 287 Exists-Methode

[ADSI] 362 Export-Clixml-Cmdlet 145, 230 Export-CSV-Cmdlet 143 Export-ModuleMember-Cmdlet 467 Export-PSSession-Cmdlet 418, 421 Export-SDMgpo-Cmdlet

SDM 404 Expresso

Reguläre Ausdrücke lernen 222 Extensible Markup Language

Verarbeitung 225

F

Fehler Behandlung 285 nicht terminierende 285 terminierende 285 Typ feststellen 288

Fehlerbehandlung Allgemeine Tipps 293 Definition 284

Fehlercode Bei der PowerShell 293

Fehlermeldung Umleiten 294

FileSystemObject-Objekt 155 FILE-TIME-Format

Konvertieren mit [DateTime] 341

finally-Befehl 292 Find-Methode

Active Directory-Zugriffe 362 Firewall

Einstellungen für WMI 324 f-Operator 198 for-Befehl 260 Force-Parameter 151 foreach-Befehl 264 ForEach-Object-Cmdlet 99 Forest (Gesamtstruktur)

Ansprechen 397 Forest-Klasse 395 Formatieren

Zahlen und Datum 198 Format-List-Cmdlet 141 Format-Table-Cmdlet 140 Format-Wide-Cmdlet 142 Freigaben 193

Anlegen 194 Mit Berechtigungen anlegen 319

FullyQualifiedErrorId-Property 287 Funktion

Mit Hilfe 283 Mit Parametern 266

Funktionen Definition 265 Mit Parametern 265 Mit Pipeline-Parameter 270

G

GAC Siehe Global Assembly Cache Game of Life 527 Get-ACL-Cmdlet 185

Registry-Berechtigungen 136 Get-BitsTransfer-Cmdlet 445 Get-ChildItem-Cmdlet 163 Get-Command-Cmdlet 83, 86 Get-Content-Cmdlet 200 Get-Date-Cmdlet 83 Get-Event-Cmdlet 338 Get-Eventlog-Cmdlet 122 Get-EventLog-Cmdlet 123 Get-ExecutionPolicy-Cmdlet 236, 489 Get-Help-Cmdlet 72, 83, 88 Get-HotFix-Cmdlet 309 Get-Item-Cmdlet 162 Get-Job-Cmdlet 107 Get-Member-Cmdlet 83, 90

Page 24: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis 573

Get-Module-Cmdlet 467 GetOwner-Methode

Win32_Process-Klasse 304 Get-Process-Cmdlet 108 Get-PSBreakPoint-Cmdlet 299 Get-PSCallStack-Cmdlet 299 Get-PSDrive-Cmdlet 149 Get-PSProvider-Cmdlet 149 Get-PSSessionConfiguration-Cmdlet 416 Get-PSSnapin-Cmdlet 502 Get-QADComputer-Cmdlet

Quest 390 Get-QADGroup-Cmdlet

Quest 390 Get-QADGroupMember-Cmdlet

Quest 390 Get-QADMemberOf-Cmdlet

Quest 390 Get-QADObject-Cmdlet

Quest 390 Get-QADPermission-Cmdlet

Quest 390 Get-QADRootDSE-Cmdlet

Quest 390 Get-QADUser-Cmdlet

Quest 390 Get-Random-Cmdlet

Zufallszahlen 524 Get-SDMgplink-Cmdlet

SDM 404 Get-SDMgpoBackups-Cmdlet

SDM 405 Get-SDMgpo-Cmdlet

SDM 404 Get-SDMgpoSecurity-Cmdlet

SDM 405 Get-SDMSOMSecurity-Cmdlet

SDM 405 Get-SDMWMIFilter-Cmdlet

SDM 405 Get-Unique-Cmdlet 83, 98 Get-WinEvent-Cmdlet 124 Get-WmiObject-Cmdlet 303

Überblick 313 Get-WSManCredSSP-Cmdlet 345, 423 Get-WSManInstance 344 Get-WSManInstance-Cmdlet 345 Global Assembly Cache 464 GlobalCatalog-Klasse 395 Globalen Katalog

Ansprechen 399 Durchsuchen 400

GPOs Siehe Gruppenrichtlinien-Objekte Group-Object-Cmdlet 83, 95

Dateien gruppieren 164 Gruppenrichtlinien

Überblick 403 Gruppenrichtlinien-Objekte

Überblick 404 Gültigkeitsbereich

Definition 475 gwmi Siehe Get-WmiObject-Cmdlet

H

Hashtable als Funktionsparameter 483 Definition 252

HelpMessage-Parameter-Property 281 Here String Siehe Here-Zeichenfolge Here-Zeichenfolge 248 Hexadezimalzahl

In Zeichenkette umwandeln 453 konvertieren 453

Hilfetexte Durchsuchen 73

Host-Objekt 69 HResult-Fehlercode

COM-Exceptions 295

I if-Befehl 256 Import-Clixml-Cmdlet 145, 230 Import-CSV-Cmdlet 97 Import-Module-Cmdlet 467 Import-PSSession-Cmdlet 418 Import-SDMgpo-Cmdlet

SDM 405 InstallUtil.exe

Snap-Ins registrieren 503 Instanzenmethoden 461 Integrated Scripting Environment Siehe PowerShell-

ISE Internet

Dateien herunterladen 452 InvocationInfo-Property 287 Invoke-Command-Cmdlet 425 Invoke-Expression-Cmdlet 88 InvokeSet-Methode

DirectoryEntry-Klasse 358 Invoke-WmiMethod-Cmdlet 304, 306, 330 Invoke-WSManAction-Cmdlet 345, 423

Page 25: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

574 Stichwortverzeichnis

J

Job Definition 106

Join-Operator 223 Join-Path-Cmdlet 160

K

Kommentare 242 Konstantenliste

Definition 463 Mitglieder auflisten 180

L

Laufwerk Aktuelles Verzeichnis 155

Laufwerke Durchsuchen 173 Umgang mit der PowerShell 153

LDAP Siehe Lightweight Directory Access Protocol LDAP-Pfad

Mit GUID 354 Überblick 353

Ldp.exe 384 Lightweight Directory Access Protocol

Überblick 383 Limit-EventLog-Cmdlet 123 LiteralPath-Parameter 152 LoadWithPartialName-Methode 464 Logdateien

Mit regulären Ausdrücken durchsuchen 215 Lokale Benutzerkonten

Anlegen und Entfernen 407

M

MailMessage-Klasse 450 Makecert.exe

Zertfikat anlegen 490 ManagementObject-Klasse

WMI 306 Mandatory-Parameterattribut 279 Mandatory-Parameter-Property 281 Manifestmodul

Überblick 468 Match-Operator 213 Measure-Command-Cmdlet 485

Measure-Object-Cmdlet 83, 101 Member

Definition 37 MessageBox-Klasse 455 Methoden

Indirekt aufrufen 456 Module

Überblick 467 Modulmanifestdatei 469 Move-Item-Cmdlet 166

Registry-Schlüssel 131

N

Namespaces .NET-Klassenbibliothek 460

NetworkCredential-Objekt GetNetworkCredential-Methode 498

Netzwerklaufwerke auflisten 156

New-EventLog-Cmdlet 123 New-Module-Cmdlet 468 New-ModuleManifest-Cmdlet 468, 469 New-Object-Cmdlet

COM-Komponenten 431 Property-Parameter 473

New-PSDrive-Cmdlet 157 New-PSSession-Cmdlet 418 New-SDMgpo-Cmdlet

SDM 405 New-Service-Cmdlet 119 New-TimeSpan-Cmdlet 86 New-WSManInstance-Cmdlet 345, 423 New-WSManSessionOption-Cmdlet 345, 423 Non Terminating Errors Siehe Fehler NTDS.dit 383

O

Objekt Definition 37

Objekte Im Vergleich zu Text 34

Objektpipeline Siehe Pipeline On Error Resume Next

Bei der PowerShell 290 Onlinehilfe

Zu einem Cmdlet abrufen 90 Option Explicit

bei der PowerShell 249

Page 26: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis 575

Organisationseinheit Siehe OrganizationalUnit OrganizationalUnit (OU)

Anlegen 375 Out-File-Cmdlet 102 Out-GridView-Cmdlet 142 Out-Null-Cmdlet

Objekte verschwinden lassen 37 Out-SDMgpsettingsreport-Cmdlet

SDM 405 Out-SDMRSOPLoggingReport-Cmdlet

SDM 405 Out-String-Cmdlet 83, 100 OutVariable-Parameter 175 Owner Siehe Besitzer

P

param-Befehl Funktionsargumente 277

Parameter Parametertypen 82 Pipeline-Parameter 281

Parameterattribut Definition 279

Parameterbindung Im Detail 478

Parameter-Parameterattribut 280 ParameterSetName-Parameter-Property 281 Path-Umgebungsvariable

Erweitern 72 Pfade

Umgang mit Verzeichnispfaden 159 Pipeline

Definition 36 Umleiten 102

Pop-Location-Cmdlet 155 Position-Parameter-Property 281 PowerGUI 509 PowerShell

ActiveDirectory-Unterstützung 350 Aus Entwicklersicht 49 Autovervollständigung 67 Dialogboxen anzeigen 455 Die Rolle der Objekte 33 Die wichtigsten Neuerungen der Version 2.0 45 Download 54 Eingabeaufforderungsfenster anpassen 69 Eingabezeileneditor 64 Für . NET-Entwickler 49 Für andere Plattformen 50

In zehn Minuten 29 Installation 54 PowerShell-Know-how 51 Protokolldatei 63 Sonderzeichen 67 Überblick über die Sicherheit 488 Version1.0/2.0 Unterschiede 58 WMI-Unterstützung 306

PowerShell 2.0 ISE 74

PowerShell Community Extensions 506 PowerShell ISE

Debuggen 296 erweitern 481

PowerShell Server /n Software 418

PowerShell.exe 57 PowerShell-Anwendergruppe 23 PowerShell-ISE 74 PowerShell Pack 504 PowerShell-Remoting

Definition 412 Konfiguration 413 TroubleShooting 414

PowerShell-Skripts 234 PrimalForms 510 Privilegien 190

Per WMI setzen 192 Process-Objekt

Member 108 Profile-Datei 58

Muster 61 Überblick 60

Prompt Siehe Eingabeprompt Property

indirekt aufrufen 456 Provider

Definition 148 Prozess

Privilegien erteilen 190 Ps1xml-Dateien

Typeninformationsdateien 433 psbase-Member

Definition 556 psbase-Property

Active Directory-Zugriffe 358 PSCredential-Objekt

anlegen 496 PSCX Siehe PowerShell Community Extensions PSModulePath-Umgebungsvariable 469

Page 27: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

576 Stichwortverzeichnis

PSObject-Typ 472 Push-Location-Cmdlet 155 Putty-Client

SSH 417

Q

Quantifizierer bei regulären Ausdrücken 212

Quest-Cmdlets Active Directory 386

R

Read-Host-Cmdlet 242 Receive-Job-Cmdlet 107 Referenzklasse

WMI 327 Regex-Klasse 211 Register-WmiEvent-Cmdlet 338 Registry

Per WMI überwachen 340 suchen 133 Überblick 125

Registry:: Registry-Provider 126

Registry-Berechtigungen 136 Reguläre Ausdrücke

Ersetzen 220 Überblick 198

Remoting Siehe PowerShell-Remoting Remove-BitsTransfer-Cmdlet 445 Remove-Event-Cmdlet 338 Remove-EventLog-Cmdlet 123 Remove-Item 170 Remove-Job-Cmdlet 107 Remove-Module-Cmdlet 468 Remove-PSBreakpoint-Cmdlet 299 Remove-PSSession-Cmdlet 418 Remove-PSSnapin-Cmdlet 502 Remove-SDMgplink-Cmdlet

SDM 405 Remove-SDMgpo-Cmdlet

SDM 405 Remove-SDMgpoSecurity-Cmdlet

SDM 405 Remove-SDMSOMSecurity-Cmdlet

SDM 405 Remove-SDMWMIFilterLink-Cmdlet

SDM 405

Remove-WmiObject-Cmdlet 306, 330 Remove-WSManInstance-Cmdlet 345, 423 Rename-Item-Cmdlet 167 Replace-Operator 214 Resolve-Path-Cmdlet 161 Restore-SDMgpo-Cmdlet

SDM 405 Resume-BitsTransfer-Cmdlet 445 Resume-Service-Cmdlet 116 return-Befehl

Funktionen 269 Robocopy 166 RootDSE 396 RSS-Feed

Einlesen 446 Runspace Siehe Ausführungsbereich

S

SAPI.SPVoice Sprachausgabe 522

Schaltjahr IsLeapYey-Methode 462

Schleifenbefehle 260 Schtasks.exe 111 Scope Siehe Gültigkeitsbereich Scope-Parameter

Variablen 477 Scriptblock-Parameter

Parameterbindung 479 Secure Shell Siehe SSH SecureString

In Text konvertieren 496 Lesbar machen 497 Überblick 495

SecureString-Klasse 496 Security Descriptor (SD) 183 Security Identifier (SID) 183 Select-Object-Cmdlet 83, 92 Select-String-Cmdlet 205

Reguläre Ausdrücke 213 Send-MailMessage-Cmdlet 449 ServiceController-Objekt 112 Session

PowerShell-Remoting 418 Set-ACL-Cmdlet 185

Registry-Berechtigungen 136 Set-Alias-Cmdlet 80 Set-AuthenticodeSignature-Cmdlet 493 Set-BitsTransfer-Cmdlet 446

Page 28: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis 577

Set-ExecutionPolicy-Cmdlet 236, 489 Set-PSBreakPoint-Cmdlet 299 Set-PSSessionConfiguration-Cmdlet 417 Set-QADObjectSecurity-Cmdlet

Quest 390 Set-QADUser-Cmdlet

Quest 390 Set-Service-Cmdlet 118 Set-Variable

Scope festlegen 477 Set-Variable-Cmdlet

Scope festlegen 477 Set-WMIInstance-Cmdlet 306, 331 Set-WSManInstance-Cmdlet 345, 423 Set-WSManQuickConfig-Cmdlet 345, 423 Shared-Methoden 461 SharePoint

PowerShell-Cmdlets 566 Show-EventLog-Cmdlet 123 Skript

Argumentübergabe 276 Parameter per Pipeline übergeben 277

Skriptdateien Signieren 490

Skriptmodul Überblick 468

Skripts Ausführen 238 Ausführungsrichtlinie 236 Dotsourced starten 239 Einführung 242 Mit anderem Benutzerkonto starten 241 Zeitgesteuert starten 239

SmtpClient-Klasse 450 Sort-Object

berechnete Ausdrücke 97 Sort-Object-Cmdlet 83, 97 Split-Operator 223 Split-Path-Cmdlet 161 Sprachausgabe

mit der PowerShell 522 SQL Server 2008

PowerShell 563 SSH

Bei der PowerShell 412, 417 Stapeldateien

auf PowerShell umstellen 544 Start-BitsTransfer-Cmdlet 445, 446 Start-Job-Cmdlet 107 Start-Transcript-Cmdlet

Bug 64

StdRegProv Registry mit WMI 336

StdRegProv-Klasse 336 Stop-Job-Cmdlet 107 Stop-Transcript-Cmdlet 63 String Siehe Zeichenkette String-Klasse

Member 224 SubinACL

Umgang mit Berechtigungen 137 SupportsShouldProcess-Property 280 Suspend-BitsTransfer-Cmdlet 446 Suspend-Service-Cmdlet 116 Svchost.exe 108 switch-Befehl 257

Mit regulären Ausdrücken 259 System Access Control List (SACL) 183 System.Xml

XML-Verarbeitung 225

T

TabExpansion 508 Takeown.exe

Besitzer festlegen 193 TargetObject-Property 287 Tee-Object-Cmdlet 102 Terminating errors Siehe Fehler Ternärer Operator 485 Test-ModuleManifest-Cmdlet 468 Test-Path-Cmdlet 159, 160, 164 Test-WSMan-Cmdlet 345, 423 Textdateien

Lesen/Schreiben 200 Texte

Verarbeiten 205 throw-Befehl 289 Tipp des Tages

Beispiel 524 Trace-Command-Cmdlet 538 Transaktionen

Definition und Cmdlets 152 trap-Befehl 289 Trusted Hosts

PowerShell-Remoting 413 try-Befehl 291

Fehlertyp abfragen 293 TryParse-Methode 262 Typ

Definieren 472

Page 29: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

578 Stichwortverzeichnis

Type Casting Bei Variablen 245

Typeninformationsdatei 557 aktualisieren 433 Types.ps1.xml 140

U

Umgebungsvariablen Abfragen und Setzen 456

UNC-Pfade 156 Unregister-Event-Cmdlet 338, 339 Update-TypeData-Cmdlet 434, 558 URI-Klasse 452 URL

Umgang mit URLs 452 USB-Laufwerke

Per WMI überwachen 341

V

ValidateCount-Parameterattribut 280 ValidateLength-Parameterattribut 280 ValidateNotNullOrEmpty-Parameterattribut 280 ValidateNotNull-Parameterattribut 280 ValidatePattern-Parameterattribut 280 ValidateRange-Parameterattribut 280 ValidateScript-Parameterattribut 280 ValidateSet-Parameterattribut 280 ValueFromPipelineByPropertyName-Parameter-

Property 281 ValueFromPipeline-Parameterattribut 279 ValueFromPipeline-Parameter-Property 281 ValueFromRemainingArgument-Parameter-Property

281 Variable

Definition 243 Die Rolle des Typs 244 Namensregeln 244

Vererbung Bei Zugriffsberechtigungen 184

Verknüpfung Anlegen 431

Version 2.0 Neuerungen 46

Verzeichnis Aktuelles Verzeichnis 155 anlegen 162 Attribute lesen und setzen 179 Kopieren 164 Umgang mit Verzeichnissen 158

W

W32tm Integer8-Datumsformat konvertieren 384

Wait-Event-Cmdlet 338 Wait-Job-Cmdlet 107 Wait-Process-Cmdlet 110 Wbemtest.exe 346 WebClient-Klasse 452 Well-Known Objects

Active Directory 354 WhatIf-Parameter 151 Where-Object-Cmdlet 83, 94 while-Befehl 262 Win32_ComputerSystem-Klasse 317 Win32_NetworkAdapterConfiguration-Klasse 317 Win32_NetworkAdapter-Klasse 317 Win32_OperatingSystem-Klasse 316 Win32_Printer-Klasse

Drucker entfernen 331 Win32_ProcessStartTrace-Klasse

WMI-Events 339 Win32_Share-Klasse

Freigabe mit Berechtigungen anlegen 319 Windows Management Framework

Überblick 54 Windows Management Instrumentation 302

Abfragen als Job 332 Abfragen via WS-Man 344 Berechtigungen 333 Datumskonvertierung 325 Eigenschaften schreiben 328 Events 337 Hard- und Softwarekonfigurationsdaten 315 Laufwerksabfragen 153 Privelegien setzen 192 Troubleshooting 323 Umstellen von WSH-Skripts 307

Windows-API Add-Type-Cmdlet 474

Winmgmt WMI-Dienst 302

WLAN-Adapter Zurücksetzen 318

WMI Siehe Windows Management Instrumentation WMI-Explorer 347 WMI-Filter

Gruppenrichtlinienobjekt 404

Page 30: Windows PowerShell 2.0 – Crashkurs - Die Onleihe

Stichwortverzeichnis 579

WMI-Klassen Die wichtigsten Klassen 305 Überblick 304

WMI-Namespaces 304 Write-EventLog-Cmdlet 123 Write-Progress-Cmdlet 175 WScript.Shell

Shortcut anlegen 431 WSMan

Überblick 414 WMI-Abfragen 344

X

X509Certificate2-Typ 490 XML Siehe Extensible Markup Language XML-Format 145

Z

Zeichengruppen bei regulären Ausdrücken 211

Zeichenkette Definition 246 Verarbeiten 224

Zertifikat Anlegen 490 Auflisten 489 Cert-Laufwerk 489

Zip-Archive 178 Zugriffsberechtigungen Siehe Berechtigungen

bei Diensten 119 bei Verzeichnissen und Dateien 183