6 Inhaltsverzeichnis



Ähnliche Dokumente
Inhaltsverzeichnis. Bibliografische Informationen digitalisiert durch

Sachverzeichnis. Ausschnitt PowerShell ISE, 157 Azure Umgang mit virtuellen Maschinen, 460 Azure-Cmdlets Die ersten Schritte, 460 Überblick, 458

Inhaltsverzeichnis. Einleitung Text vom Benutzer erfragen Text über ein Dialogfeld erfragen... 23

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Tobias Weltner. PowerShell-Scripting fur Administratoren

Microsoft Windows PowerShell v3.0/4.0

Step by Step Webserver unter Windows Server von Christian Bartl

Peter Monadjemi. Windows PowerShell 2.0 Crashkurs

Inhaltsverzeichnis. Vorwort... Danksagungen und Kontakt zum Autor...

Inhaltsverzeichnis. Vorwort. Basiswissen

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Windows PowerShell Crashkurs

OP-LOG

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

1 Voraussetzungen für Einsatz des FRITZ! LAN Assistenten

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Annette Stolz. Das Windows Server 2003 Codebook

Memeo Instant Backup Kurzleitfaden. Schritt 1: Richten Sie Ihr kostenloses Memeo-Konto ein

Verschlüsseln Sie Ihre Dateien lückenlos Verwenden Sie TrueCrypt, um Ihre Daten zu schützen.

Installieren von Microsoft Office Version 2.1

Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten

Gruppenrichtlinien und Softwareverteilung

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Möglichkeiten des Parallelbetriebs der VR-NetWorld Software Parallelbetrieb VR-NetWorld Software 4.4x und Version 5.0 ab der 2. Beta!

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

26. November EFS Übung. Ziele. Zwei Administrator Benutzer erstellen (adm_bill, adm_peter) 2. Mit adm_bill eine Text Datei verschlüsseln

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich.

ecall sms & fax-portal

Windows Scripting lernen

Stapelverarbeitung Teil 1

PowerMover. Eine Zusatz-Anwendung für Outlook-PowerUser. Damit können eingehende s schneller verwaltet werden. Vasquez Systemlösungen

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

teischl.com Software Design & Services e.u. office@teischl.com

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Datensicherung. Beschreibung der Datensicherung

6.1.2 Beispiel 118: Kennwort eines Benutzers ändern

Family Safety (Kinderschutz) einrichten unter Windows 7

KURZANLEITUNG CLOUD OBJECT STORAGE

mit ssh auf Router connecten

Dokumentation IBIS Monitor

Anleitung Captain Logfex 2013

Anleitung zur Installation von SFirm 3.1 inklusive Datenübernahme

Installation und Einrichtung des Microsoft SQL Servers 2005 Express. Abb.1.0

bizsoft Rechner (Server) Wechsel

Professionelle Seminare im Bereich MS-Office

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

Kurzeinführung Excel2App. Version 1.0.0

Berechnungen in Access Teil I

Artikel Schnittstelle über CSV

Warenwirtschaft Handbuch - Administration

Installation DataExpert Paynet-Adapter (SIX)

Einrichtung eines -Zugangs mit Mozilla Thunderbird

Inhaltsverzeichnis. Einleitung Texte und Textauswertungen Datum und Zeit 71

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Speichern. Speichern unter

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Parks > Authorization Manager. Versionshinweise

Variablen & erweiterte Aktionen nutzen

Tutorial Windows XP SP2 verteilen

FILEZILLA HANDBUCH

Microsoft Access 2013 Navigationsformular (Musterlösung)

STRATO Mail Einrichtung Mozilla Thunderbird

Windows 7 - Whoami. Whoami liefert Informationen wie z.b. die SID, Anmelde-ID eines Users, sowie Gruppenzuordnungen, Berechtigungen und Attribute.

LERNWERKSTATT SEKUNDARSTUFE I

1 Objektfilterung bei der Active Directory- Synchronisierung

Beheben von verlorenen Verknüpfungen

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation Erstkonfiguration... 4

Psyprax GmbH. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

-Verschlüsselung mit Geschäftspartnern

Schritt 1 - Registrierung und Anmeldung

Task: Nmap Skripte ausführen

NTT DATA Helpdesk Benutzerhandbuch

Diese Anleitung erläutert die Einrichtung des Active Directory Modus im DNS-343.

Neuinstallation Einzelplatzversion

Verwendung des IDS Backup Systems unter Windows 2000

Windows 8.1. Grundkurs kompakt. Markus Krimm, Peter Wies 1. Ausgabe, Januar inkl. zusätzlichem Übungsanhang K-W81-G-UA

Hardware - Software - Net zwerke

Umleiten von Eigenen Dateien per GPO

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

3 Windows als Storage-Zentrale

Geben Sie "regedit" ein und klicken Sie auf die OK Taste. Es öffnet sich die Registry.

Clients in einer Windows Domäne für WSUS konfigurieren

Wir basteln einen Jahreskalender mit MS Excel.

Auf einen Blick. Vorwort Einführung Sprachgrundlagen von VBScript Objektorientierte Programmierung mit. dem Windows Script Host 115

Anleitungen zum KMG- -Konto

Frankieren in Microsoft Word mit dem E Porto Add in der Deutschen Post

6. Benutzerdefinierte Zahlenformate

EXPANDIT. ExpandIT Client Control Kurzanleitung. utilities. be prepared speed up go mobile. Stand

GITS Steckbriefe Tutorial

Installationsanleitung dateiagent Pro

Installationsanleitung für Update SC-Line

Verschlüsseln von USB-Sticks durch Installation und Einrichtung von TrueCrypt

Musterlösung für Schulen in Baden-Württemberg. Windows Basiskurs Windows-Musterlösung. Version 3. Stand:

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

Transkript:

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

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 197

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 enthalten 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 Konstruktion ^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ünglichsten 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 eingefü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 Zeichenkette 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 Zeichenkette 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-/Zahlenkombination 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 wichtigsten 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 Datums-/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 c (oder C) Bedeutung 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) HH hh mm MM MMM MMMM n p (oder P) s ss t T x (oder X) Y yy yyyy Wissenschaftliche Darstellung einer Zahl Stunden im 24-Stunden-Format Stunden im 12-Stunden-Format Minuten Monat als Zahl Monat kurz (z. B. Dez) Monat voll ausgeschrieben Numerischer Wert mit Nachkommastellen, die Anzahl an Nachkommastellen folgt direkt hinter dem»n«, z. B.»n2«für 2 Nachkommastellen Prozentangabe Datum und Zeit, getrennt durch den Buchstaben»T«: Jahr-Monat-TagTStunde:Minute-Sekunde Sekunden Kurzes Zeitformat (Uhrzeit:Stunde) Langes Zeitformat (Uhrzeit:Stunde:Sekunde) Als Hexadezimalzahl Monat voll ausgeschrieben und Jahr vierstellig Jahreszahl zweistellig 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 eingelesen 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 interpretiert. 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