Windows PowerShell 2.0 – Crashkurs - Die Onleihe
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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 $_ }
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
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
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
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
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
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
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
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
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
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
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