Cover

Inhalt

Titelei

Impressum

Inhalt

Vorwort zur sechsten Auflage

Wer bin ich?

Wer sind Sie?

Was ist neu in diesem Buch?

Sind in diesem Buch alle Features der PowerShell beschrieben?

Wie aktuell ist dieses Buch?

Wem ist zu danken?

Woher bekommen Sie die Beispiele aus diesem Buch?

Wie sind die Programmcodebeispiele organisiert?

Wo können Sie sich schulen oder beraten lassen?

Zum Schluss des Vorworts ...

Über den Autor Dr. Holger Schwichtenberg

Teil A: PowerShell-Basiswissen

1 Erste Schritte mit der PowerShell

1.1 Was ist die PowerShell?

1.2 Windows PowerShell versus PowerShell Core

1.3 Geschichte der PowerShell

1.4 Motivation zur PowerShell

1.5 Betriebssysteme mit vorinstallierter PowerShell

1.6 Windows PowerShell herunterladen und auf anderen Windows-Betriebssystemen installieren

Installationsordner

Ereignisprotokoll „PowerShell“

Deinstallation

1.7 Die Windows PowerShell testen

1.7.1 PowerShell im interaktiven Modus

1.7.2 Installierte Version ermitteln

1.7.3 PowerShell im Skriptmodus

1.7.4 Skript eingeben

1.7.5 Skript starten

1.7.6 Skriptausführungsrichtlinie ändern

1.7.7 Farben ändern

1.8 PowerShell Core installieren und testen

1.8.1 Installation und Test auf Windows

1.8.2 Installation und Test auf Ubuntu Linux

1.8.3 Installation und Test auf MacOS

1.9 Woher kommen die Commandlets?

1.10 PowerShell Community Extensions (PSCX) herunterladen und installieren

1.11 Den Windows PowerShell-Editor „ISE“ verwenden

2 Architektur der PowerShell

3 Einzelbefehle der PowerShell

3.1 Commandlets

3.1.1 Aufbau eines Commandlets

3.1.2 Aufruf von Commandlets

3.1.3 Commandlet-Parameter

3.1.4 Platzhalter bei den Parameterwerten

3.1.5 Abkürzungen für Parameter

3.1.6 Allgemeine Parameter (Common Parameters)

3.1.7 Dynamische Parameter

3.1.8 Zeilenumbrüche

3.1.9 PowerShell-Module

3.1.10 Prozessmodell

3.1.11 Aufruf von Commandlets aus anderen Prozessen heraus

3.1.12 Namenskonventionen

3.2 Aliase

3.2.1 Aliase auflisten

3.2.2 Neue Aliase anlegen

3.2.3 Aliase für Eigenschaften

3.3 Ausdrücke

3.4 Externe Befehle

3.5 Dateinamen

4 Hilfefunktionen

4.1 Auflisten der verfügbaren Befehle

4.2 Volltextsuche

4.3 Erläuterungen zu den Befehlen

4.4 Hilfe zu Parametern

4.5 Hilfe mit Show-Command

4.6 Hilfefenster

4.7 Allgemeine Hilfetexte

4.8 Aktualisieren der Hilfedateien

4.9 Online-Hilfe

4.10 Fehlende Hilfetexte

4.11 Dokumentation der .NET-Klassen

5 Objektorientiertes Pipelining

5.1 Pipeline-Operator

5.2 .NET-Objekte in der Pipeline

5.3 Pipeline Processor

5.4 Pipelining von Parametern

5.5 Pipelining von klassischen Befehlen

5.6 Anzahl der Objekte in der Pipeline

5.7 Zeilenumbrüche in Pipelines

5.8 Zugriff auf einzelne Objekte aus einer Menge

5.9 Zugriff auf einzelne Werte in einem Objekt

Einzelne Werte aus allen Objekten einer Objektmenge

5.10 Methoden ausführen

5.11 Analyse des Pipeline-Inhalts

Methode ToString()

Methode GetType()

Get-PipelineInfo

Get-Member

Methoden (Mitgliedsart Method)

Eigenschaften (Mitgliedsart Property)

Eigenschaftssätze (PropertySet)

Notizeigenschaften (NoteProperty)

Skripteigenschaften (ScriptProperty)

Codeeigenschaften (Code Property)

Aliaseigenschaft (AliasProperty)

Hintergrundwissen: Extended Type System (ETS)

5.12 Filtern

Vereinfachte Schreibweise von Bedingungen seit PowerShell-Version 3.0

5.13 Zusammenfassung von Pipeline-Inhalten

5.14 „Kastrierung“ von Objekten in der Pipeline

5.15 Sortieren

5.16 Duplikate entfernen

Praxisbeispiel: Microsoft-Office-Wörterbücher zusammenfassen

5.17 Gruppierung

Praxisbeispiel

5.18 Berechnungen

5.19 Zwischenschritte in der Pipeline mit Variablen

5.20 Verzweigungen in der Pipeline

Tee-Object

Parameter -OutVariable

Parameter -PipelineVariable

Beispiel 1

Beispiel 2

5.21 Vergleiche zwischen Objekten

5.22 Zusammenfassung

5.23 Praxisbeispiele

6 PowerShell-Skripte

6.1 Skriptdateien

Beispiel

6.2 Start eines Skripts

6.3 Aliase für Skripte verwenden

6.4 Parameter für Skripte

6.5 Skripte dauerhaft einbinden (Dot Sourcing)

6.6 Das aktuelle Skriptverzeichnis

6.7 Sicherheitsfunktionen für PowerShell-Skripte

Mögliche Sicherheitsrichtlinien

Hintergründe

6.8 Anforderungsdefinitionen von Skripten

6.9 Skripte anhalten

6.10 Versionierung und Versionsverwaltung von Skripten

6.10.1 Versionierung

6.10.2 Versionsverwaltung (Versionskontrolle)

7 PowerShell-Skriptsprache

7.1 Hilfe zur PowerShell-Skriptsprache

7.2 Befehlstrennung

7.3 Kommentare

7.4 Variablen

7.4.1 Variablen in der PowerShell

7.4.2 Typisierung

7.4.3 Datentypen/Typbezeichner in PowerShell

7.4.4 Typisierungszwang

7.4.5 Typkonvertierung (Typumwandlung)

7.4.6 Gültigkeitsbereiche (Scope)

7.4.7 Variablen leeren oder löschen

7.4.8 Variablentyp ermitteln

7.4.9 Vordefinierte Variablen

7.5 Variablenbedingungen

7.6 Zahlen

7.7 Zeichenketten (Strings)

7.7.1 Zeichenkettenliterale

7.7.2 Zeichenketten zusammensetzen

7.7.3 Variablenauflösung in Zeichenketten

7.7.4 Wiederholte Zeichenketten

7.7.5 Leere Zeichenketten

7.7.6 Sonderzeichen in Zeichenketten

7.7.7 Bearbeitungsmöglichkeiten für Zeichenketten

7.7.8 Zeichenketten ersetzen

7.7.9 Zeichenketten trennen und verbinden

7.8 Reguläre Ausdrücke

7.8.1 Mustervergleichsoperatoren

7.8.2 Allgemeiner Aufbau von regulären Ausdrücken

7.9 Datum und Uhrzeit

7.10 Arrays

7.10.1 Deklaration

7.10.2 Arrayoperationen

7.10.3 Array auflisten

7.10.4 Arrays verbinden

7.10.5 Mehrdimensionale Arrays

7.11 ArrayList

7.12 Assoziative Arrays (Hash-Tabellen)

7.13 Operatoren

7.13.1 Vergleichsoperatoren

7.13.2 Arithmetische Operatoren

7.13.3 Zuweisungsoperator

7.13.4 Bit-Operatoren

7.13.5 Aufrufoperator

7.14 Überblick über die Kontrollkonstrukte

7.15 Schleifen

7.16 Bedingungen

7.17 Unterroutinen (Prozedur/Funktionen)

7.17.1 Prozedur versus Funktion

7.17.2 Prozeduren

7.17.3 Funktionen (mit Rückgabewerten)

7.17.4 Art der Rückgabewerte

7.17.5 Parameterübergabe

7.18 Eingebaute Funktionen

7.19 Fehlerbehandlung

7.20 Objektorientiertes Programmieren mit Klassen

8 Ausgaben

8.1 Ausgabe-Commandlets

8.2 Benutzerdefinierte Tabellenformatierung

Praxisbeispiel 1: Laufende Prozesse

Praxisbeispiel 2: Verfügbare PowerShell-Module

8.3 Benutzerdefinierte Listenausgabe

8.4 Mehrspaltige Ausgabe

8.5 Out-GridView

Suchen

8.6 Standardausgabe

8.7 Einschränkung der Ausgabe

8.8 Seitenweise Ausgabe

8.9 Ausgabe einzelner Werte

8.10 Details zum Ausgabeoperator

8.11 Ausgabe von Methodenergebnissen und Unterobjekten in Pipelines

8.12 Ausgabe von Methodenergebnissen und Unterobjekten in Zeichenketten

8.13 Unterdrückung der Ausgabe

8.14 Ausgaben an Drucker

8.15 Ausgaben in Dateien

8.16 Umleitungen (Redirection)

8.17 Fortschrittsanzeige

8.18 Sprachausgabe

9 Das PowerShell-Navigationsmodell

9.1 Einführungsbeispiel: Navigation in der Registrierungsdatenbank

9.2 Provider und Laufwerke

9.3 Navigationsbefehle

9.4 Pfadangaben

9.5 Beispiel

9.6 Eigene Laufwerke definieren

10 Fernausführung (Remoting)

10.1 RPC-Fernabfrage ohne WS-Management

10.2 Anforderungen an PowerShell Remoting

10.3 Rechte für PowerShell-Remoting

10.4 Einrichten von PowerShell Remoting

10.5 Überblick über die Fernausführungs-Commandlets

10.6 Interaktive Fernverbindungen im Telnet-Stil

Möglichkeiten einer Fernsitzung

10.7 Fernausführung von Befehlen

10.8 Parameterübergabe an die Fernausführung

10.9 Fernausführung von Skripten

10.10 Ausführung auf mehreren Computern

Abbrechen eines Fernbefehls

10.11 Sitzungen

10.11.1 Commandlets zur Sitzungsverwaltung

10.11.2 Sitzungen erstellen

10.11.3 Kopieren von Dateien in Sitzungen

10.11.4 Schließen von Sitzungen

10.11.5 Sitzungskonfigurationen

10.11.6 Zugriffsrechte für Fernaufrufe

10.12 Implizites Remoting

10.13 Zugriff auf entfernte Computer außerhalb der eigenen Domäne

Herleitung des Problems

Eintrag in die Liste vertrauter Systeme

Ausführen von Befehlen auf entfernten Computern außerhalb der eigenen Domäne

10.14 Verwaltung des WS-Management-Dienstes

10.15 PowerShell Direct für Hyper-V

10.16 Praxisbeispiel zu PowerShell Direct

11 PowerShell-Werkzeuge

11.1 PowerShell-Standardkonsole

11.1.1 Funktionsumfang der Standardkonsole

11.1.2 Kopieren und Einfügen (Copy/Paste)

11.1.3 Tabulatorvervollständigung

11.1.4 Farbe in der Konsole ab Windows 10/Windows Server 2016 mit PSReadline

11.1.5 Form der Eingabeunterstützung

11.1.6 Kommandomodus versus Interpretermodus

11.1.7 Zeilenumbrüche in Befehlen

11.1.8 Benutzerkontensteuerung/Administratorrechte

11.1.9 Feststellen, unter welchen Rechten die PowerShell wirklich läuft

11.1.10 Starten als „Administrator“

11.2 PowerShell Integrated Scripting Environment (ISE)

11.2.1 Start der ISE

11.2.2 Konsolenbereich

11.2.3 Skriptbereich

11.2.4 ISE-Skriptdebugger

11.2.5 Unterschiede zur normalen PowerShell-Konsole

11.2.6 Remote PowerShell mit der PowerShell ISE

11.2.7 Fernbearbeitung von Dateien mit psedit

11.2.8 ISE Praxistipp: Zuklappbare Bereiche und Regionen

11.3 PowerShell Script Analyzer

Regeln des Script Analyzers

Commandlets des Script Analyzers

Einsatzbeispiele

11.4 PowerShell Analyzer

11.5 PowerShell Tools for Visual Studio

11.6 PowerShell Pro Tools for Visual Studio

11.7 NuGet Package Manager

11.8 PowerShell-Erweiterung für Visual Studio Code

11.9 PowerShell Web Access (PSWA)

Installation von PSWA

Schritt 1: Installation der Rollen und Features

Schritt 2: Anlegen der Webanwendung im IIS

Schritt 3: Zugriffsrechte vergeben

Schritt 4: Konfigurationsänderungen (optional)

Anmelden an PSWA

Verwenden der PSWA

11.10 Azure Cloud Shell

11.11 ISE Steroids

11.12 PowerShellPlus

11.13 PoshConsole

11.14 PowerGUI

11.15 PrimalScript

11.16 PowerShell Help

11.17 CIM Explorer for PowerShell ISE

11.18 PowerShell Help Reader

11.19 PowerShell Remoting

12 Windows PowerShellCore 5.1 in Windows NanoServer

13 PowerShellCore 6.x für Windows,Linux undMacOS

13.1 Funktionsumfang der PowerShell Core

13.1.1 PowerShell-Kern-Befehle, die in PowerShell Core fehlen

13.1.2 Befehle, die zusätzlich unter Linux und MacOS fehlen

13.1.3 Erweiterungsmodule

13.1.4 Änderungen der Parameter von PowerShell.exe

13.1.5 Neue Funktionen der PowerShell Core

13.2 PowerShell Core-Konsole

13.3 VSCode-PowerShell

13.4 Verwendung auf Linux und MacOS

13.4.1 Praxisbeispiel: einen klassischen Linux-Befehl in der PowerShell-Pipeline verwenden

13.4.2 Praxisbeispiel: Dateien unter Linux und MacOS verstecken und versteckte Dateien auflisten

13.5 PowerShell-Remoting via SSH

Teil B: PowerShell-Aufbauwissen

14 Verwendung von .NET-Klassen

14.1 Microsoft Developer Network (MSDN)

14.2 Erzeugen von Instanzen

Konstruktorfunktion new() seit PowerShell 5.0

Praxisbeispiel

14.3 Parameterbehaftete Konstruktoren

14.4 Initialisierung von Objekten

14.5 Nutzung von Attributen und Methoden

14.6 Statische Mitglieder in .NET-Klassen und statische .NET-Klassen

14.7 Generische Klassen nutzen

14.8 Zugriff auf bestehende Objekte

14.9 Laden von Assemblies

Beispiel 1

Beispiel 2:

Laden bereits geladener Assemblies

Liste der geladenen Assemblies

14.10 Objektanalyse

14.11 Auflistungen (Enumerationen)

14.12 Verknüpfen von Aufzählungswerten

15 Verwendung von COM-Klassen

15.1 Erzeugen von COM-Instanzen

15.2 Nutzung von Attributen und Methoden

15.3 Liste aller COM-Klassen

15.4 Holen bestehender COM-Instanzen

15.5 Distributed COM (DCOM)

16 Zugriff auf die Windows ManagementInstrumentation (WMI)

16.1 Einführung in WMI

Was ist WMI?

Versionszählung

WMI-Funktionsumfang

WMI-Klassen und WMI-Objekte

Arten von WMI-Klassen

Besondere Klassenformen

Klassenmitglieder

Schlüsselattribute

Systemattribute

Metadaten mit Qualifizierer (Qualifier)

Objektassoziationen

WMI-Namensräume (Namespaces)

Lokalisierung

WMI-Pfade

WMI-Schema

WMI-Repository

WMI-Systemdienst

WMI-Netzwerkprotokoll

WMI-Provider

Managed Object Format (MOF)

WMI-Sicherheit

WMI-Ereignissystem

WMI-Ereigniskonsumenten

WMI Query Language (WQL)

Typen von WQL-Anfragen

Datenabfragen (Data Queries)

Schemaabfragen (Schema Queries)

Ereignisabfragen (Event Queries)

WMI-Werkzeuge

WMI Object Browser

Weitere Werkzeuge

WMI-Programmierschnittstellen

WMI API in der System.Management.dll

Management Infrastructure API in der System.Management.Infrastructure.dll

Weitere Neuerungen in WMI Version 2

16.2 WMI in der PowerShell

16.3 Open Management Infrastructure (OMI)

16.4 Abruf von WMI-Objektmengen

16.5 Fernzugriffe

16.6 Filtern und Abfragen

Filtern mit Get-WmiObject

Zugriff auf einzelne WMI-Objekte

WQL-Abfragen

16.7 Liste aller WMI-Klassen

16.8 Hintergrundwissen: WMI-Klassenprojektion mit dem PowerShell-WMI-Objektadapter

16.9 Beschränkung der Ausgabeliste bei WMI-Objekten

16.10 Zugriff auf einzelne Mitglieder von WMI-Klassen

16.11 Werte setzen in WMI-Objekten

16.12 Umgang mit WMI-Datumsangaben

Konvertierung des WMI-Formats in normale Datumsobjekte

16.13 Methodenaufrufe

Invoke-WmiMethod

Weitere Beispiele

Invoke-CimMethod

16.14 Neue WMI-Instanzen erzeugen

16.15 Instanzen entfernen

16.16 Commandlet Definition XML-Datei (CDXML)

Praxisbeispiel: WMI-Klassenstatistik

17 Dynamische Objekte

17.1 Erweitern bestehender Objekte

17.2 Komplett dynamische Objekte

18 Einbinden von C# und Visual Basic .NET

19 Win32-API-Aufrufe

20 Benutzereingaben

20.1 Read-Host

20.2 Benutzerauswahl

20.3 Grafischer Eingabedialog

20.4 Dialogfenster

20.5 Authentifizierungsdialog

20.6 Zwischenablage (Clipboard)

21 Fehlersuche

21.1 Detailinformationen

21.2 Einzelschrittmodus

21.3 Zeitmessung

21.4 Ablaufverfolgung (Tracing)

21.4.1 Tracesources

21.4.2 Verfolgung eines Einzelbefehls

21.4.3 Generelle Ablaufverfolgung

21.5 Erweiterte Protokollierung aktivieren

21.6 Script-Debugging in der ISE

21.7 Kommandozeilenbasiertes Script-Debugging

22 Transaktionen

22.1 Commandlets für Transaktionen

22.2 Start und Ende einer Transaktion

22.3 Zurücksetzen der Transaktion

22.4 Mehrere Transaktionen

23 Standardeinstellungen ändern mit Profilskripten

23.1 Profilpfade

23.2 Ausführungsreihenfolge

23.3 Beispiel für eine Profildatei

23.4 Starten der PowerShell ohne Profilskripte

24 Digitale Signaturen für PowerShell-Skripte

24.1 Zertifikat erstellen

24.2 Skripte signieren

24.3 Verwenden signierter Skripte

24.4 Mögliche Fehlerquellen

25 Hintergrundaufträge („Jobs“)

25.1 Voraussetzungen

25.2 Architektur

25.3 Starten eines Hintergrundauftrags

25.4 Hintergrundaufträge abfragen

25.5 Warten auf einen Hintergrundauftrag

25.6 Abbrechen und Löschen von Aufträgen

25.7 Analyse von Fehlermeldungen

25.8 Fernausführung von Hintergrundaufträgen

25.9 Praxisbeispiel

26 Geplante Aufgaben und zeitgesteuerte Jobs

26.1 Geplante Aufgaben (Scheduled Tasks)

26.2 Zeitgesteuerte Jobs

27 PowerShell-Workflows

27.1 Ein erstes Beispiel

27.2 Unterschiede zu einer Function bzw. einem Skript

27.3 Einschränkungen bei Workflows

27.4 Workflows in der Praxis

27.5 Workflows in Visual Studio erstellen

28 Ereignissystem

28.1 WMI-Ereignisse

28.2 WMI-Ereignisabfragen

28.3 WMI-Ereignisse seit PowerShell 1.0

28.4 Registrieren von WMI-Ereignisquellen seit PowerShell 2.0

28.5 Auslesen der Ereignisliste

28.6 Reagieren auf Ereignisse

28.7 WMI-Ereignisse ab PowerShell-Version 3.0

28.8 Registrieren von .NET-Ereignissen

28.9 Erzeugen von Ereignissen

29 Datenbereiche und Datendateien

29.1 Datenbereiche

29.2 Datendateien

29.3 Mehrsprachigkeit/Lokalisierung

30 Desired State Configuration (DSC)

30.1 Grundprinzipien

30.2 DSC für Linux

30.3 Ressourcen

30.4 Verfügbare DSC-Ressourcen

30.5 Eigenschaften einer Ressource

30.6 Aufbau eines DSC-Dokuments

30.7 Commandlets für die Arbeit mit DSC

30.8 Ein erstes DSC-Beispiel

30.9 Kompilieren und Anwendung eines DSC-Dokuments

30.10 Variablen in DSC-Dateien

30.11 Parameter für DSC-Dateien

30.12 Konfigurationsdaten

30.13 Entfernen einer DSC-Konfiguration

30.14 DSC Pull Server

30.14.1 Einrichten des DSC Pull Servers

30.14.2 Einrichten der Clients

30.14.3 Bereitstellen von DSC-Konfigurationen für Clients

30.14.4 Diagnose

30.15 DSC-Praxisbeispiel 1: IIS installieren

30.16 DSC-Praxisbeispiel 2: Software installieren

30.17 DSC-Praxisbeispiel 3: Software deinstallieren

30.18 Realisierung einer DSC-Ressource

30.19 Weitere Möglichkeiten

31 PowerShell-Snap-Ins

31.1 Einbinden von Snap-Ins

31.2 Liste der Commandlets

32 PowerShell-Module

32.1 Überblick über die Commandlets

32.2 Modularchitektur

32.3 Module aus dem Netz herunterladen und installieren mit PowerShellGet

32.4 Module manuell installieren

32.5 Doppeldeutige Namen

32.6 Auflisten der verfügbaren Module

32.7 Importieren von Modulen

32.8 Entfernen von Modulen

33 Ausgewählte PowerShell-Erweiterungen

33.1 PowerShell-Module in Windows 7 und Windows Server 2008 R2

33.2 PowerShell-Module in Windows 8.0 und Windows Server 2012

33.3 PowerShell-Module in Windows 8.1 und Windows Server 2012 R2

33.4 PowerShell-Module in Windows 10 und Windows Server 2016

33.5 PowerShell Community Extensions (PSCX)

33.6 PowerShellPack

33.7 www.IT-Visions.de: PowerShell Extensions

33.8 Quest Management Shell for Active Directory

33.9 Microsoft Exchange Server

33.10 System Center Virtual Machine Manager

33.11 PowerShell Management Library for Hyper-V (pshyperv)

33.12 Powershell Outlook Account Manager

33.13 PowerShell Configurator (PSConfig)

33.14 Weitere Erweiterungen

34 Delegierte Administration/Just Enough Administration (JEA)

34.1 JEA-Konzept

34.2 PowerShell-Sitzungskonfiguration erstellen

34.3 Sitzungskonfiguration nutzen

34.4 Delegierte Administration per Webseite

35 Tipps und Tricks zur PowerShell

35.1 Alle Anzeigen löschen

35.2 Befehlsgeschichte

35.3 System- und Hostinformationen

35.4 Anpassen der Eingabeaufforderung (Prompt)

35.5 PowerShell-Befehle aus anderen Anwendungen heraus starten

35.6 ISE erweitern

35.7 PowerShell für Gruppenrichtlinienskripte

35.8 Einblicke in die Interna der Pipeline-Verarbeitung

Teil C: PowerShell im Praxiseinsatz

36 Dateisystem

36.1 Laufwerke

36.2 Ordnerinhalte

36.3 Dateieigenschaften verändern

36.4 Eigenschaften ausführbarer Dateien

36.5 Kurznamen

36.6 Lange Pfade

36.7 Dateisystemoperationen

36.8 Praxisbeispiel: Zufällige Dateisystemstruktur erzeugen

36.9 Praxisbeispiel: Leere Ordner löschen

36.10 Einsatz von Robocopy

36.11 Dateisystemkataloge

36.12 Papierkorb leeren

36.13 Dateieigenschaften lesen

36.14 Praxisbeispiel: Fotos nach Aufnahmedatum sortieren

36.15 Datei-Hash

36.16 Finden von Duplikaten

36.17 Verknüpfungen im Dateisystem

36.18 Komprimierung

36.19 Dateisystemfreigaben

36.20 Überwachung des Dateisystems

36.21 Dateiversionsverlauf

36.22 Windows Explorer öffnen

36.23 Windows Server Backup

37 Festplattenverschlüsselung mit BitLocker

37.1 Übersicht über das BitLocker-Modul

37.2 Verschlüsseln eines Laufwerks

38 Dokumente

38.1 Textdateien

38.2 CSV-Dateien

38.3 Analysieren von Textdateien

38.3.1 Convert-String

38.3.2 ConvertFrom-String

38.4 INI-Dateien

38.5 XML-Dateien

38.6 HTML-Dateien

38.7 Binärdateien

39 Datenbanken

39.1 ADO.NET-Grundlagen

39.2 Beispieldatenbank

39.3 Datenzugriff mit den Bordmitteln der PowerShell

39.4 Datenzugriff mit den PowerShell-Erweiterungen

39.5 Datenbankzugriff mit SQLPS

39.6 Datenbankzugriff mit SQLPSX

40 Microsoft-SQL-Server-Administration

40.1 PowerShell-Integration im SQL Server Management Studio

40.2 SQL-Server-Laufwerk „SQLSERVER:“

40.3 Die SQLPS-Commandlets

40.4 Die SQL Server Management Objects (SMO)

40.5 SQLPSX

40.6 Microsoft-SQL-Server-Administration mit der PowerShell in der Praxis

41 ODBC-Datenquellen

41.1 ODBC-Treiber und -Datenquellen auflisten

41.2 Anlegen einer ODBC-Datenquelle

41.3 Zugriff auf eine ODBC-Datenquelle

42 Registrierungsdatenbank (Registry)

42.1 Schlüssel auslesen

42.2 Schlüssel anlegen und löschen

42.3 Laufwerke definieren

42.4 Werte anlegen und löschen

42.5 Werte auslesen

42.6 Praxisbeispiel: Windows-Explorer-Einstellungen

42.7 Praxisbeispiel: Massenanlegen von Registry-Schlüsseln

43 Computer- und Betriebssystemverwaltung

43.1 Computerinformationen

43.2 Versionsnummer des Betriebssystems

43.3 Zeitdauer seit dem letzten Start des Betriebssystems

43.4 BIOS- und Startinformationen

43.5 Windows-Produktaktivierung

43.6 Umgebungsvariablen

43.6.1 Laufwerk env:

43.6.2 Variable $env

43.6.3 .NET-Klasse System.Environment

43.7 Schriftarten

43.8 Computername und Domäne

43.9 Herunterfahren und Neustarten

43.10 Windows Updates installieren

43.10.1 Suche nach Updates

43.10.2 Installation von Updates

43.10.3 Änderung der Einstellungen zu automatischen Updates

43.11 Wiederherstellungspunkte verwalten

44 Windows Defender

45 Hardwareverwaltung

45.1 Hardwarebausteine

45.2 Plug-and-Play-Geräte

45.3 Druckerverwaltung (ältere Betriebssysteme)

45.4 Druckerverwaltung (seit Windows 8 und Windows Server 2012)

46 Softwareverwaltung

46.1 Softwareinventarisierung

46.2 Installation von Anwendungen

46.3 Deinstallation von Anwendungen

46.4 Praxisbeispiel: Installationstest

46.5 Installationen mit PowerShell Package Management („OneGet“)

46.5.1 Voraussetzungen

46.5.2 Paketmanagement-Commandlets

46.6 Versionsnummer ermitteln

46.7 Servermanager

46.8 Softwareeinschränkungen mit dem PowerShell-Modul „AppLocker“

47 Prozessverwaltung

47.1 Prozesse auflisten

47.2 Prozesse starten

47.3 Prozesse mit vollen Administratorrechten starten

47.4 Prozesse unter einem anderen Benutzerkonto starten

47.5 Prozesse beenden

47.6 Warten auf das Beenden einer Anwendung

48 Systemdienste

48.1 Dienste auflisten

48.2 Dienstzustand ändern

48.3 Diensteigenschaften ändern

49 Netzwerk

49.1 Netzwerkkonfiguration (ältere Betriebssysteme)

49.2 Netzwerkkonfiguration (ab Windows 8 und Windows Server 2012)

49.3 DNS-Client-Konfiguration

49.4 DNS-Namensauflösung

49.5 Erreichbarkeit prüfen (Ping)

49.6 Windows Firewall

49.7 Remote Desktop (RDP) einrichten

49.8 E-Mails senden (SMTP)

49.8.1 E-Mail senden mit System.Net.Mail

49.8.2 E-Mail senden mit Send-SmtpMail

49.8.3 E-Mail senden mit Send-MailMessage

49.9 Auseinandernehmen von E-Mail-Adressen

49.10 Abruf von Daten von einem HTTP-Server

49.11 Praxisbeispiel: Linkprüfer für eine Website

49.12 Aufrufe von SOAP-Webdiensten

49.13 Aufruf von REST-Diensten

49.14 Aufrufe von OData-Diensten

49.15 Hintergrunddatentransfer mit BITS

49.15.1 BITS-Commandlets

49.15.2 Beispiel

49.15.3 Abfrage des Fortschritts

49.15.4 Anhalten und Löschen von Hintergrund-Downloads

50 Ereignisprotokolle (Event Log)

51 Leistungsdaten (Performance Counter)

51.1 Zugriff auf Leistungsindikatoren über WMI

51.2 Get-Counter

52 Sicherheitseinstellungen

52.1 Aktueller Benutzer

52.2 Grundlagen

52.3 Zugriffsrechtelisten auslesen

52.4 Einzelne Rechteeinträge auslesen

52.5 Besitzer auslesen

52.6 Benutzer und SID

52.7 Hinzufügen eines Rechteeintrags zu einer Zugriffsrechteliste

52.8 Entfernen eines Rechteeintrags aus einer Zugriffsrechteliste

52.9 Zugriffsrechteliste übertragen

52.10 Zugriffsrechteliste über SDDL setzen

52.11 Zertifikate verwalten

53 Optimierungen und Problemlösungen

53.1 PowerShell-Modul „TroubleshootingPack“

53.2 PowerShell-Modul „Best Practices“

54 Active Directory

54.1 Benutzer- und Gruppenverwaltung mit WMI

54.2 Einführung in System.DirectoryServices

54.3 Basiseigenschaften

54.4 Benutzer- und Gruppenverwaltung im Active Directory

54.5 Verwaltung der Organisationseinheiten

54.6 Suche im Active Directory

54.7 Navigation im Active Directory mit den PowerShell Extensions

54.8 Verwendung der Active-Directory-Erweiterungen von www.IT-Visions.de

54.9 PowerShell-Modul „Active Directory“ (ADPowerShell)

54.10 PowerShell-Modul „ADDSDeployment“

54.11 Informationen über die Active-Directory-Struktur

55 Gruppenrichtlinien

55.1 Verwaltung der Gruppenrichtlinien

55.2 Verknüpfung der Gruppenrichtlinien

55.3 Gruppenrichtlinienberichte

55.4 Gruppenrichtlinienvererbung

55.5 Weitere Möglichkeiten

56 Lokale Benutzer und Gruppen

56.1 Modul „Microsoft.PowerShell.LocalAccounts“

56.2 Lokale Benutzerverwaltung in älteren PowerShell-Versionen

57 Microsoft Exchange Server

57.1 Daten abrufen

57.2 Postfächer verwalten

57.3 Öffentliche Ordner verwalten

58 Internet Information Server (IIS)

58.1 Überblick

58.2 Navigationsprovider

58.3 Anlegen von Websites

58.4 Praxisbeispiel: Massenanlegen von Websites

58.5 Ändern von Website-Eigenschaften

58.6 Anwendungspool anlegen

58.7 Virtuelle Verzeichnisse und IIS-Anwendungen

58.8 Website-Zustand ändern

58.9 Anwendungspools starten und stoppen

58.10 Löschen von Websites

59 Virtuelle Systeme mit Hyper-V

59.1 Das Hyper-V-Modul von Microsoft

59.2 Die ersten Schritte mit dem Hyper-V-Modul

59.3 Virtuelle Maschinen anlegen

59.4 Umgang mit virtuellen Festplatten

59.5 Konfiguration virtueller Maschinen

59.6 Dateien kopieren in virtuelle Systeme

59.7 PowerShell Management Library for Hyper-V (für ältere Betriebssysteme)

60 Windows Nano Server

60.1 Das Konzept von Nano Server

60.2 Einschränkungen von Nano Server

60.3 Varianten des Nano Servers

60.4 Installation eines Nano Servers

60.5 Docker-Image

60.6 Fernverwaltung mit PowerShell

60.7 Windows Update auf einem Nano Server

60.8 Nachträgliche Paketinstallation

60.9 Abgespeckter IIS unter Nano Server

60.10 Nano-Serververwaltung aus der Cloud heraus

61 Docker-Container

61.1 Docker-Varianten für Windows

61.2 Docker-Installation auf Windows 10

61.3 Docker-Installation auf Windows Server 2016

61.4 Installation von „Docker for Windows“

61.5 Docker-Registries

61.6 Docker-Images laden

61.7 Container starten

61.8 Container-Identifikation

61.9 Container mit Visual Studio

61.9.1 Containerprojekt erstellen

61.9.2 Debugging eines Containers

61.9.3 Verwendung des erstellten Containers

61.10 Befehle in einem Container ausführen

61.11 Ressourcenbeschränkungen für Container

61.12 Dateien zwischen Container und Host kopieren

61.13 Dockerfile

61.14 Docker-Netzwerke

61.15 Container anlegen, ohne sie zu starten

61.16 Container starten und stoppen

61.17 Container beenden und löschen

61.18 Images löschen

61.19 Images aus Containern erstellen

61.20 .NET Core-Container

61.21 Images verbreiten

61.21.1 Images verbreiten mit Archiv-Dateien

61.21.2 Images verbreiten via Repository

61.22 Azure Container Service (ACS)

62 Grafische Benutzeroberflächen (GUI)

62.1 Einfache Nachfragedialoge

62.2 Einfache Eingabe mit Inputbox

62.3 Komplexere Eingabemasken

62.4 Universelle Objektdarstellung

62.5 WPF PowerShell Kit (WPK)

62.6 Direkte Verwendung von WPF

Teil D:Profiwissen – Erweitern der PowerShell

63 Entwicklung von Commandlets in der PowerShell-Skriptsprache

63.1 Aufbau eines skriptbasierten Commandlets

63.2 Verwendung per Dot Sourcing

63.3 Parameterfestlegung

63.4 Fortgeschrittene Funktion (Advanced Function)

63.5 Mehrere Parameter und Parametersätze

63.6 Unterstützung für Sicherheitsabfragen (-whatif und -confirm)

63.7 Kaufmännisches Beispiel: Test-CustomerID

63.8 Erweitern bestehender Commandlets durch Proxy-Commandlets

63.8.1 Schritt 1: Generierung des Grundgerüstes

63.8.2 Schritt 2: Erweitern des Grundgerüstes

63.8.3 Schritt 3: Einsatz des Proxy-Commandlets

63.9 Dokumentation

64 Entwicklung eigener Commandlets mit C#

64.1 Technische Voraussetzungen

64.2 Grundkonzept der .NET-basierten Commandlets

64.3 Schrittweise Erstellung eines minimalen Commandlets

64.4 Erstellung eines Commandlets mit einem Rückgabeobjekt

64.5 Erstellung eines Commandlets mit mehreren Rückgabeobjekten

64.6 Erstellen eines Commandlets mit Parametern

64.7 Verarbeiten von Pipeline-Eingaben

64.8 Verkettung von Commandlets

64.9 Fehlersuche in Commandlets

64.10 Statusinformationen

64.11 Unterstützung für Sicherheitsabfragen (-whatif und -confirm)

64.12 Festlegung der Hilfeinformationen

64.13 Erstellung von Commandlets für den Zugriff auf eine Geschäftsanwendung

64.14 Konventionen für Commandlets

64.15 Weitere Möglichkeiten

65 PowerShell-Module erstellen

65.1 Erstellen eines Skriptmoduls

65.2 Praxisbeispiel: Umwandlung einer Skriptdatei in ein Modul

65.3 Erstellen eines Moduls mit Binärdateien

65.4 Erstellen eines Moduls mit Manifest

65.5 Erstellung eines Manifest-Moduls mit Visual Studio

66 Hosting der PowerShell

66.1 Voraussetzungen für das Hosting

66.2 Hosting mit PSHost

66.3 Vereinfachtes Hosting seit PowerShell 2.0

Anhang A: Crashkurs „Objektorientierung“

Anhang B: Crashkurs .NET

B.1 Was ist das .NET Framework?

B.2 Was ist .NET Core?

B.3 Eigenschaften von .NET

B.4 .NET-Klassen

B.5 Namensgebung von .NET-Klassen (Namensräume)

B.6 Namensräume und Softwarekomponenten

B.7 Bestandteile einer .NET-Klasse

B.8 Vererbung

B.9 Schnittstellen

Anhang C: Literatur

Anhang D: Weitere Informationen im Internet

Anhang E: Abkürzungsverzeichnis

Holger Schwichtenberg

Windows PowerShell 5 und PowerShell Core 6

Das Praxisbuch

Der Autor:

Dr. Holger Schwichtenberg, Essen www.IT-Visions.de

Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen – oder Teilen davon – entsteht.

Ebenso übernehmen Autor und Verlag keine Gewähr dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen­ und Markenschutz­Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Bibliografische Information der Deutschen Nationalbibliothek: Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) – auch nicht für Zwecke der Unterrichtsgestaltung – reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden.

Lektorat: Sylvia Hasselbach
Copyediting: Sandra Gottmann, Nienberge
Umschlagdesign: Marc Müller-Bremer, www.rebranding.de, München
Umschlagrealisation: Stephan Rönigk

Print-ISBN 978-3-446-45331-9
E-Book-ISBN 978-3-446-45397-5

Verwendete Schriften: SourceSansPro und SourceCodePro (Lizenz)
CSS-Version: 1.0

Font License Zurück zum Impressum

Copyright 2010, 2012, 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Vorwort zur sechsten Auflage

Liebe Leserin, lieber Leser,

willkommen zur fünften Auflage dieses PowerShell-Buchs! Das vor Ihnen liegende Buch behandelt die Windows PowerShell in der Version 5.1 sowie die PowerShell Core in der Version 6.0 (zum Redaktionsschluss dieses Buchs noch Beta-Version) von Microsoft sowie ergänzende Werkzeuge von Microsoft und Drittanbietern (z. B. PowerShell Community Extensions). Das Buch ist aber auch geeignet, wenn Sie noch PowerShell 2.0, 3.0, 4.0 oder 5.0 einsetzen. Welche Funktionen neu hinzugekommen sind, wird jeweils erwähnt.

Wer bin ich?

Mein Name ist Holger Schwichtenberg, ich bin derzeit 44 Jahre alt und habe im Fachgebiet Wirtschaftsinformatik promoviert. Ich lebe (in Essen, im Herzen des Ruhrgebiets) davon, dass mein Team und ich im Rahmen unserer Firma www.IT-Visions.de anderen Unternehmen bei der Entwicklung von .NET-, Web- und PowerShell-Anwendungen beratend und schulend zur Seite stehen. Zudem entwickeln wir im Rahmen der 5Minds IT-Solutions GmbH & Co. KG Software (www.5Minds.de) im Auftrag von Kunden in zahlreichen Branchen.

Es ist mein Hobby und Nebenberuf, IT-Fachbücher zu schreiben. Dieses Buch ist, unter Mitzählung aller nennenswerten Neuauflagen, das 67. Buch, das ich allein oder mit Co-Autoren geschrieben habe. Meine weiteren Hobbys sind Mountain Biking, Lauf-Sport, Fotografie und Reisen.

Natürlich verstehe ich das Bücherschreiben auch als Werbung für die Arbeit unserer Unternehmen und wir hoffen, dass der ein oder andere von Ihnen uns beauftragen wird, Ihre Organisation durch Beratung, Schulung und Auftragsentwicklung zu unterstützen.

Wer sind Sie?

Damit Sie den optimalen Nutzen aus diesem Buch ziehen können, möchte ich – so genau es mir möglich ist – beschreiben, an wen sich dieses Buch richtet. Hierzu habe ich einen Fragebogen ausgearbeitet, mit dem Sie schnell erkennen können, ob das Buch für Sie geeignet ist.

Sind Sie Systemadministrator in einem Windows-Netzwerk?

Ja

Nein

Laufen die für Sie relevanten Computer mit den von PowerShell 3.0, 4.0, 5.x oder 6.x unterstützten Betriebssystemen? (Windows 7/8/8.1/10, Windows Server 2008/2008 R2/2012/2012 R2/2016)
Hinweis: Die PowerShell 6.0 für Linux und MacOS wird nur als Randthema kurz in diesem Buch behandelt, da es hier bislang kaum Befehle für die PowerShell gibt!

Ja

Nein

Sie besitzen zumindest rudimentäre Grundkenntnisse im Bereich des (objektorientierten) Programmierens?

Ja

Nein

Wünschen Sie einen kompakten Überblick über die Architektur, Konzepte und Anwendungsfälle der PowerShell?

Ja

Nein

Sie können auf Schritt-für-Schritt-Anleitungen verzichten?

Ja

Nein

Sie können auf formale Syntaxbeschreibungen verzichten und lernen lieber an aussagekräftigen Beispielen?

Ja

Nein

Sie erwarten nicht, dass in diesem Buch alle Möglichkeiten der PowerShell detailliert beschrieben werden?

Ja

Nein

Sind Sie, nachdem Sie ein Grundverständnis durch dieses Buch gewonnen haben, bereit, Detailfragen in der Dokumentation der PowerShell, von .NET und WMI nachzuschlagen, da das Buch auf 1200 Seiten nicht alle Details erläutern kann?

Ja

Nein

Wenn Sie alle obigen Fragen mit „Ja“ beantwortet haben, ist das Buch richtig für Sie. In anderen Fällen sollten Sie sich erst mit einführender Literatur beschäftigen.

Was ist neu in diesem Buch?

Gegenüber der vorherigen Auflage zur PowerShell 5.0 wurde das Buch um die neuen Funktionen in Windows PowerShell 5.1 sowie PowerShell Core 6.0 erweitert und inhaltlich optimiert. Praxiseinsatzkapitel wurden ergänzt zu Windows Update, Windows Nano Server und Docker-Containern. Zudem wurden die bestehenden Inhalte des Buchs an vielen Stellen erweitert und didaktisch optimiert.

Sind in diesem Buch alle Features der PowerShell beschrieben?

Die PowerShell umfasst mittlerweile über 1500 Commandlets mit jeweils zahlreichen Optionen. Zudem gibt es unzählige Erweiterungen mit vielen hundert weiteren Commandlets. Zudem existieren zahlreiche Zusatzwerkzeuge. Es ist allein schon aufgrund der Vorgaben des Verlags für den Umfang des Buchs nicht möglich, alle Commandlets und Parameter hier auch nur zu erwähnen. Zudem habe ich – obwohl ich selbst fast jede Woche mit der PowerShell in der Praxis arbeite – immer noch nicht alle Commandlets und alle Parameter jemals eingesetzt. Ich beschreibe in diesem Buch, was ich selbst in der Praxis, in meinen Schulungen und bei Kundeneinsätzen verwende. Es macht auch keinen Sinn, jedes Detail der PowerShell hier zu dokumentieren. Stattdessen gebe ich Ihnen Hilfe zur Selbsthilfe, damit Sie die Konzepte gut verstehen und sich dann Sonderfälle selbst erarbeiten können.

Wie aktuell ist dieses Buch?

Die Informationstechnik hat sich immer schon schnell verändert. Seit aber auch Microsoft das Themen „Agilität“ und „Open Source“ für sich entdeckt hat, ist die Entwicklung nicht mehr schnell, sondern zum Teil rasant:

Unter diesen neuen Einflussströmen steht natürlich auch dieses etablierte Buch. Leider kann man ein gedrucktes Buch nicht so schnell ändern wie Software. Verlage definieren erhebliche Mindestauflagen, die abverkauft werden müssen, bevor neu gedruckt werden darf. Das E-Book ist keine Alternative. Die Verkaufszahlen zeigen, dass nur eine verschwindend kleine Menge von Lesern technischer Literatur ein E-Book statt eines gedruckten Buchs kauft. Das E-Book wird offenbar nur gerne als Ergänzung genommen. Das kann ich gut verstehen, denn ich selbst lese auch lieber gedruckte Bücher und nutze E-Books nur für eine Volltextsuche.

Daher kann es passieren, dass – auch schon kurz nach dem Erscheinen dieses Buchs – einzelne Informationen in diesem Buch nicht mehr zu neueren Versionen passen. Wenn Sie so einen Fall feststellen, schreiben Sie bitte eine Nachricht an mich im Leser-Portal (siehe unten). Ich werde dies dann in Neuauflagen des Buchs berücksichtigen.

Wem ist zu danken?

Folgenden Personen möchte ich meinen Dank für ihre Mitwirkung an diesem Buch aussprechen:

Woher bekommen Sie die Beispiele aus diesem Buch?

Unter http://www.powershell-doktor.de/leser biete ich ein ehrenamtlich betriebenes Webportal für Leser meiner Bücher an. In diesem Portal können Sie

Alle registrierten Leser erhalten auch Einladungen zu kostenlosen Community-Veranstaltungen sowie Vergünstigungen bei unseren öffentlichen Seminaren zu .NET und zur PowerShell. Bei der Registrierung müssen Sie das Kennwort Rogue One angeben.

Wie sind die Programmcodebeispiele organisiert?

Die Beispiele sind im Archiv organisiert nach den Buchteilen und innerhalb der Buchteile nach Kapitelnamen (verkürzt). In diesem Buch wird für den Zugriff auf die Beispieldateien das X:-Laufwerk verwendet. Dies müssen Sie auf Ihre Situation anpassen!

Image

Image

Wo können Sie sich schulen oder beraten lassen?

Unter der E-Mail-Adresse kundenteam@IT-Visions.de stehen mein Team und ich für Anfragen bezüglich Schulung, Beratung und Entwicklungstätigkeiten zur Verfügung – nicht nur zum Thema PowerShell und .NET, sondern zu fast allen modernen Techniken der Entwicklung und des Betriebs von Software. Wir besuchen Sie gerne in Ihrem Unternehmen an einem beliebigen Standard.

Zum Schluss des Vorworts ...

... wünsche ich Ihnen viel Spaß und Erfolg mit der PowerShell!

Dr. Holger Schwichtenberg

Essen, im Juni 2017

Über den Autor Dr. Holger Schwichtenberg