Einführung

PowerShell ist eine leistungsfähige und flexible Skriptsprache, die auf der .NET-Plattform basiert und in vielen Bereichen der IT eingesetzt wird. Eine der Stärken von PowerShell liegt in der effizienten und konsistenten Handhabung von Objekten. In dieser Einführung werden wir die Bedeutung von PowerShell-Objekten und ihre Rolle im PowerShell-Ökosystem untersuchen.

PowerShell-Objekte sind zentrale Elemente in der Skriptsprache und ermöglichen es Benutzern, Daten und Informationen auf strukturierte Weise zu verarbeiten, speichern und manipulieren. Objekte bieten eine Vielzahl von Funktionen, einschließlich der Fähigkeit, Daten zu kategorisieren, Mitglieder und Methoden aufzurufen, und eine einheitliche Schnittstelle für das Verarbeiten von Informationen aus unterschiedlichen Quellen und in verschiedenen Formaten.

Arten von Objekten in PowerShell

PowerShell-Objekte bieten eine Vielzahl von Möglichkeiten, um Daten und Informationen auf strukturierte Weise zu verarbeiten, speichern und manipulieren. In diesem Kapitel werden wir die verschiedenen Arten von PowerShell-Objekten, ihre Eigenschaften und typischen Anwendungsfälle untersuchen.

PSCustomObject (ab PowerShell 3.0)

PSCustomObject ist eine flexible und leistungsfähige Art von PowerShell-Objekt, das zur Erstellung von benutzerdefinierten Objekten verwendet wird. Es ermöglicht das Erstellen von Objekten mit benutzerdefinierten Eigenschaften und Methoden und wird häufig verwendet, um Daten aus verschiedenen Quellen zu konsolidieren oder komplexe Strukturen zu erstellen.

Typische Anwendungsfälle für PSCustomObject sind das Kombinieren von Daten aus verschiedenen Quellen, die Erstellung von Berichten oder die Verwaltung von Konfigurationsinformationen.

PSObject (ab PowerShell 1.0)

PSObject ist der grundlegende Objekttyp in PowerShell und dient als Basisklasse für alle anderen Objekttypen. PSObject stellt eine einheitliche Schnittstelle für die Arbeit mit Daten aus unterschiedlichen Quellen und in verschiedenen Formaten bereit.

Typische Anwendungsfälle für PSObject sind das Verarbeiten von Daten aus unterschiedlichen Quellen, das Verwalten von Systeminformationen und das Arbeiten mit Remote-Systemen.

.NET-Objekte (ab PowerShell 1.0)

PowerShell basiert auf der .NET-Plattform und ermöglicht die nahtlose Integration von .NET-Objekten in PowerShell-Skripts. Dadurch können Entwickler auf die umfangreichen Bibliotheken und Funktionen von .NET zugreifen und ihre Skripts mit zusätzlichen Funktionen erweitern.

Typische Anwendungsfälle für .NET-Objekte sind das Arbeiten mit Dateien und Verzeichnissen, das Verwalten von Netzwerkverbindungen oder das Erstellen von benutzerdefinierten Benutzeroberflächen.

COM-Objekte (ab PowerShell 1.0)

COM (Component Object Model) ist eine Technologie, die es ermöglicht, wiederverwendbare Softwarekomponenten zu erstellen und in verschiedenen Anwendungen zu nutzen. PowerShell unterstützt die Verwendung von COM-Objekten, sodass Entwickler auf vorhandene COM-Komponenten zugreifen und diese in ihren Skripts verwenden können.

Typische Anwendungsfälle für COM-Objekte sind das Automatisieren von Office-Anwendungen (wie Word oder Excel), das Arbeiten mit Active Directory oder das Verwalten von Systemressourcen.

WMI-Objekte (ab PowerShell 1.0)

WMI (Windows Management Instrumentation) ist eine Technologie zur Verwaltung von Windows-Systemen und -Ressourcen. PowerShell ermöglicht den Zugriff auf WMI-Objekte, um Informationen über das System, Hardware, installierte Software oder Netzwerkverbindungen abzurufen und zu verwalten.

Typische Anwendungsfälle für WMI-Objekte sind die Überwachung von Systemleistung und -zustand, die Verwaltung von Hardwarekomponenten oder die Inventarisierung von Software.

XML- und JSON Objekte (ab Powershell 2.0/3.0)

PowerShell bietet Unterstützung für das Arbeiten mit XML- und JSON-Objekten, die weit verbreitete Datenformate zum Austausch von strukturierten Informationen zwischen Systemen sind. Durch die Integration von XML- und JSON-Objekten können Entwickler Informationen aus verschiedenen Quellen importieren, verarbeiten und exportieren.

Typische Anwendungsfälle für XML- und JSON-Objekte sind das Lesen und Schreiben von Konfigurationsdateien, das Verarbeiten von Daten aus Web-APIs oder das Speichern von Daten in strukturierten Dateiformaten.

Remote-Objekte (ab PowerShell 2.0)

Mit PowerShell können Entwickler Remote-Objekte verwenden, um auf entfernte Systeme zuzugreifen und diese zu verwalten. Remote-Objekte ermöglichen die Ausführung von Befehlen und Skripten auf entfernten Computern und die Verarbeitung der Ergebnisse auf dem lokalen System.

Typische Anwendungsfälle für Remote-Objekte sind die Verwaltung von Netzwerkgeräten, die Überwachung von Systemen und Diensten oder die Automatisierung von Wartungsaufgaben auf entfernten Computern.

CIM-Objekte (ab PowerShell 3.0)

CIM (Common Information Model) ist ein offener Standard zur Darstellung und Verwaltung von Systemressourcen und -informationen. PowerShell ermöglicht den Zugriff auf CIM-Objekte, um Informationen über das System, Hardware, installierte Software oder Netzwerkverbindungen abzurufen und zu verwalten, ähnlich wie bei WMI-Objekten.

Typische Anwendungsfälle für CIM-Objekte sind die Überwachung von Systemleistung und -zustand, die Verwaltung von Hardwarekomponenten oder die Inventarisierung von Software.

Es ist wichtig zu beachten, dass PowerShell ständig weiterentwickelt wird und in zukünftigen Versionen möglicherweise weitere Objekttypen hinzugefügt werden. Diese Liste ist jedoch eine solide Grundlage für die Arbeit mit PowerShell-Objekten und bietet einen umfassenden Überblick über die verschiedenen Objekttypen und ihre Anwendungsfälle.

Internes Verständnis von PowerShell-Objekten

In diesem Kapitel werden wir uns mit dem internen Verständnis von PowerShell-Objekten beschäftigen, um ein besseres Verständnis dafür zu entwickeln, wie PowerShell mit Objekten interagiert und wie diese in Skripten verwendet werden.

Objektzuweisung

Die Zuweisung eines Objekts in PowerShell erfolgt durch die Verwendung des „=“-Operators. Dabei wird das Ergebnis eines Befehls oder einer Operation einem Variablennamen zugewiesen. Zum Beispiel kann der folgende Befehl verwendet werden, um die Dateien und Ordner in einem bestimmten Verzeichnis abzurufen und in einem Objekt zu speichern:

$myObj = Get-ChildItem -Path C:\Users\Username\Documents

In diesem Beispiel wird der Befehl Get-ChildItem verwendet, um die Dateien und Ordner im angegebenen Verzeichnis abzurufen. Das Ergebnis der Operation wird der Variable $myObj zugewiesen, die nun ein Objekt enthält, das die Dateien und Ordner im Verzeichnis repräsentiert.

Objekt und Hashtable

Objekte und Hashtables sind zwei wichtige Strukturen in PowerShell, die jeweils unterschiedliche Eigenschaften und Anwendungsfälle aufweisen.

  • Objekte: Objekte sind Instanzen von Klassen, die Eigenschaften und Methoden besitzen. Objekte sind in der Regel das Ergebnis von PowerShell-Befehlen und repräsentieren Systemressourcen, Daten oder Informationen.
  • Hashtable: Eine Hashtable ist eine Sammlung von Schlüssel-Wert-Paaren, bei der jeder Schlüssel eindeutig ist. Hashtables werden häufig verwendet, um Daten auf strukturierte Weise zu speichern und schnell auf sie zuzugreifen.

Beispiel für die Erstellung eines Objekts und einer Hashtable:

Um ein Objekt in eine Hashtable zu konvertieren, kann die GetEnumerator()-Methode zusammen mit der ForEach-Object-Pipeline verwendet werden:

In diesem Beispiel wird die Get-Member-Cmdlet verwendet, um alle Eigenschaften des Objekts $myObj abzurufen, und die ForEach-Object-Pipeline wird verwendet, um durch die Eigenschaften zu iterieren und sie in der Hashtable $convertedHashtable zu speichern.

Objektausgabe und Formatierung

Format-List (fl)

Format-List ist ein PowerShell-Cmdlet, das Objekte als Liste von Eigenschaften und ihren zugehörigen Werten ausgibt. Es ist nützlich, wenn die Anzahl der Eigenschaften groß ist oder wenn die Werte der Eigenschaften mehr Platz benötigen.

Format-Table (ft)

Format-Table ist ein Cmdlet in PowerShell, mit dem Sie die Ausgabe von Befehlen in einer tabellarischen Form darstellen können. Mit diesem Cmdlet können Sie die Ausgabe von Objekten formatieren und steuern, welche Eigenschaften angezeigt werden sollen.

Objekt-Member

Definition und Bedeutung

Objekt-Member sind die Eigenschaften und Methoden, die einem Objekt zugeordnet sind. Sie repräsentieren die Daten und Aktionen, die mit einem Objekt verknüpft sind, und sind entscheidend für das Verständnis und die Verwendung von Objekten in PowerShell-Skripten.

Arten von Objekt-Membern

Es gibt zwei Hauptarten von Objekt-Membern in PowerShell:

  • Eigenschaften: Eigenschaften sind die Daten, die einem Objekt zugeordnet sind. Sie können einfache Werte wie Strings oder Zahlen sein oder komplexe Typen wie andere Objekte oder Sammlungen.
  • Methoden: Methoden sind Aktionen, die auf einem Objekt ausgeführt werden können. Sie sind Funktionen, die mit dem Objekt verknüpft sind und bestimmte Aufgaben ausführen, wie z. B. das Hinzufügen eines Elements zu einer Sammlung oder das Berechnen eines Werts auf Basis der Eigenschaften des Objekts.

Verwendung von Get-Member

Get-Member ist ein PowerShell-Cmdlet, das verwendet wird, um Informationen über die Member eines Objekts, wie Eigenschaften und Methoden, abzurufen.

Funktionsweise von Get-Member

Get-Member arbeitet, indem es ein Objekt als Eingabe akzeptiert und eine Liste der zugehörigen Member (Eigenschaften und Methoden) ausgibt. Dies ist nützlich, um ein besseres Verständnis der Struktur eines Objekts und der verfügbaren Aktionen zu erhalten.

Zugriff auf Objektteile und selektive Objektausgabe

Zugriff auf bestimmte Zeilen und Spalten

Um auf bestimmte Zeilen und Spalten eines Objekts zuzugreifen, können Sie Indizes und Eigenschaftsnamen verwenden. Wenn Sie beispielsweise auf die dritte Zeile und die Spalte „Name“ eines Objekts zugreifen möchten, verwenden Sie den folgenden Code:

Selektive Objektausgabe mit Select-Object

Select-Object ist ein PowerShell-Cmdlet, das verwendet wird, um selektive Objektausgaben zu erstellen, indem nur bestimmte Eigenschaften eines Objekts ausgewählt werden.

Funktionsweise von Select-Object

Select-Object arbeitet, indem es ein Objekt als Eingabe akzeptiert und ein neues Objekt mit nur den ausgewählten Eigenschaften erstellt. Dies ist nützlich, um die Anzahl der angezeigten Informationen zu reduzieren und die Ergebnisse auf die relevanten Daten zu beschränken.

Speichern eines reduzierten Objekts in einem neuen Objekt

Nachdem Sie ein reduziertes Objekt mit Select-Object erstellt haben, können Sie es in einer neuen Variable speichern, um es für weitere Verarbeitung oder Ausgabe zu verwenden:

In Kombination mit anderen Cmdlets wie Sort-Object, Where-Object und Format-Table ermöglicht Select-Object Ihnen, komplexe Datenmanipulationen und -transformationen durchzuführen, um Ihre PowerShell-Skripte an Ihre spezifischen Anforderungen anzupassen.

Objekt-Piping

PowerShell bietet die Möglichkeit, Objekte mithilfe von Pipes (|) zwischen Cmdlets weiterzuleiten. Dies ermöglicht es Ihnen, die Ausgabe eines Cmdlets als Eingabe für ein anderes Cmdlet zu verwenden, ohne Zwischenvariablen erstellen zu müssen. In diesem Kapitel werden wir uns mit Objekt-Piping in PowerShell befassen und einige Beispiele betrachten.

Objekt-Piping ist ein effizienter Weg, um mehrere Cmdlets miteinander zu verknüpfen und komplexe Aufgaben zu erledigen. Hier ist ein einfaches Beispiel, das die Verwendung von Pipes in PowerShell zeigt:

Objekt-Piping bietet mehrere Vorteile:

  1. Effizienz: Indem Sie die Ausgabe eines Cmdlets direkt als Eingabe für ein anderes Cmdlet verwenden, können Sie die Verarbeitungszeit verringern und Zwischenspeicherung vermeiden.
  2. Übersichtlichkeit: Pipes ermöglichen es Ihnen, komplexe Abläufe in einer einzigen Befehlszeile auszudrücken, was die Lesbarkeit Ihres Skripts verbessert und die Anzahl der benötigten Variablen reduziert.
  3. Flexibilität: Sie können Pipes verwenden, um Cmdlets auf unterschiedliche Weise miteinander zu verbinden und so eine Vielzahl von Aufgaben zu erledigen. Dies ermöglicht es Ihnen, Ihre Skripte leichter anzupassen und zu erweitern.

Best Practices für Objekt-Piping

Bei der Verwendung von Objekt-Piping in Ihren PowerShell-Skripten sollten Sie einige bewährte Methoden beachten:

  • Verwenden Sie Pipes für eine bessere Lesbarkeit: Wenn Sie mehrere Cmdlets in einer Pipeline verwenden, ist es einfacher, den Ablauf der Befehle und die Verarbeitung der Daten zu verstehen.
  • Vermeiden Sie übermäßig komplexe Pipelines: Wenn Ihre Pipeline zu lang oder kompliziert wird, kann sie schwieriger zu lesen und zu warten sein. In solchen Fällen sollten Sie in Erwägung ziehen, Ihre Pipeline in kleinere Abschnitte aufzuteilen oder einige Schritte in Funktionen oder Skriptblöcken zu kapseln.
  • Achten Sie auf die Kompatibilität der Objekte: Stellen Sie sicher, dass die Ausgabe eines Cmdlets mit der Eingabe des nächsten Cmdlets in der Pipeline kompatibel ist. Andernfalls kann es zu Fehlern oder unerwarteten Ergebnissen kommen.

Beispiele

Hinzufügen und Entfernen von Objekteigenschaften

Add-Member

Das Cmdlet Add-Member wird verwendet, um Eigenschaften zu PowerShell-Objekten hinzuzufügen. Hier ist ein Beispiel, wie Sie eine neue Eigenschaft zu einem Objekt hinzufügen können:

Alternativen für unterschiedliche Objekttypen

Die meisten PowerShell-Objekte können mit Add-Member erweitert werden. Es gibt jedoch einige Unterschiede, wie Sie Eigenschaften zu verschiedenen Objekttypen hinzufügen können:

  • PSCustomObject: Bei PSCustomObjects können Sie direkt Eigenschaften hinzufügen, indem Sie die Hashtable-Notation verwenden [Beispiel 1]
  • .NET-Objekte: Bei .NET-Objekten können Sie Add-Member verwenden, um zusätzliche Eigenschaften hinzuzufügen. Beachten Sie jedoch, dass dies die zugrunde liegende .NET-Klasse nicht ändert und die zusätzlichen Eigenschaften nur für das PowerShell-Objekt gelten.
  • COM-Objekte: Bei COM-Objekten ist es im Allgemeinen nicht empfehlenswert, Eigenschaften hinzuzufügen oder zu entfernen, da diese Objekte auf externe Komponenten zugreifen und Änderungen an diesen Objekten unerwartete Ergebnisse oder Fehler verursachen können.

Entfernen von Objekteigenschaften

PowerShell bietet keine direkte Methode, um eine Eigenschaft von einem Objekt zu entfernen. Sie können jedoch ein neues Objekt erstellen und die gewünschten Eigenschaften mit Select-Object aus dem vorhandenen Objekt auswählen:

Sort-Object und Where-Object

Sort-Object

Sort-Object wird verwendet, um Objekte basierend auf einer oder mehreren Eigenschaften zu sortieren.

> Get-Service | Sort-Object -Property Status, DisplayName

Where-Object

Where-Object wird verwendet, um Objekte basierend auf einer Bedingung zu filtern.

> Get-Process | Where-Object { $_.WorkingSet -gt 100MB }

Abrufen von WMI-Objekten

Einführung in WMI

Windows Management Instrumentation (WMI) ist ein Framework für die Verwaltung und Überwachung von Windows-Systemen. PowerShell ermöglicht den Zugriff auf WMI-Objekte, um Informationen über das System und seine Komponenten abzurufen oder Systemkonfigurationen zu ändern. In diesem Kapitel geben wir eine kurze Einführung in das Abrufen von WMI-Objekten in PowerShell.

Verwendung von Get-WmiObject

Get-WmiObject ist ein Cmdlet, das verwendet wird, um WMI-Objekte abzurufen. Sie können es verwenden, um auf WMI-Klassen zuzugreifen und Informationen über Ihr System zu erhalten:

Verwendung von WIM-Abfragen

Sie können auch WMI Query Language (WQL) verwenden, um WMI-Objekte abzufragen. WQL ist eine SQL-ähnliche Abfragesprache, die speziell für WMI entwickelt wurde. Hier ist ein Beispiel:

> Get-WmiObject -Query „SELECT * FROM Win32_Process WHERE WorkingSetSize > 100000000“

dazu gibt es aber noch einen detaillierteren Artikel: ????????????

Speichern von Objekten in Arrays

Um mehrere Objekte in einem Array zu speichern, können Sie entweder ein Array aus vorhandenen Objekten erstellen oder Objekte direkt zu einem Array hinzufügen:

Insgesamt ist das Hinzufügen und Entfernen von Eigenschaften bei PowerShell-Objekten ein nützliches Konzept, um Ihre Skripte an Ihre individuellen Anforderungen anzupassen. Beachten Sie jedoch, dass bei verschiedenen Objekttypen unterschiedliche Methoden zum Hinzufügen oder Entfernen von Eigenschaften angewendet werden sollte

Iteration durch Objekte

In PowerShell können Sie über verschiedene Objekttypen iterieren, um bestimmte Elemente anzusprechen. Die genaue Syntax für die Iteration hängt von der Art des Objekts ab, auf das Sie zugreifen möchten.

Out-GridView

Out-GridView ist ein Cmdlet in PowerShell, das es ermöglicht, Objekte in einer Grid-Ansicht anzuzeigen und zu durchsuchen. Mit Out-GridView können PowerShell-Objekte visuell dargestellt und einfach durchsucht werden.

ObjekttypFunktioniert mit Out-GridView
PSCustomObjectJa
PSObjectJa
.NET-ObjekteJa
WMI-ObjekteJa
XML-ObjekteJa
JSON-ObjekteJa
Remote-ObjekteJa
CMI-ObjekteJa

Die meisten Objekttypen in PowerShell funktionieren mit Out-GridView. Es ist ein leistungsstarkes Tool, um große Mengen von Daten schnell zu durchsuchen und nach bestimmten Kriterien zu filtern. In einigen Fällen können Einschränkungen in der Grid-Ansicht jedoch dazu führen, dass bestimmte Objekte nicht vollständig dargestellt werden können. In diesem Fall können andere Tools wie Export-CSV oder Export-HTML verwendet werden, um die Daten in einem anderen Format darzustellen.

Exportieren von Objekten

PowerShell bietet verschiedene Möglichkeiten, um Objekte in verschiedenen Formaten wie CSV, JSON, XML und Excel zu exportieren. In diesem Kapitel werden wir die verschiedenen Exportoptionen vorstellen.

Export nach Excel

Um PowerShell-Objekte in Excel zu exportieren, können Sie die ImportExcel-Modul verwenden, das nicht standardmäßig in PowerShell enthalten ist. Sie müssen es zuerst installieren:

> Install-Module -Name ImportExcel

Anschließend können Sie das Export-Excel-Cmdlet verwenden, um Objekte in eine Excel-Datei zu exportieren.

> Get-Process | Export-Excel -Path „processes.xlsx“

Export als HTML

Export-HTML ist ein Cmdlet in PowerShell, das es ermöglicht, PowerShell-Objekte in HTML-Dateien zu exportieren. Mit Export-HTML können PowerShell-Objekte als Tabellen in HTML-Dateien gespeichert werden, die dann in einem Webbrowser angezeigt werden können.

Das Cmdlet Export-HTML funktioniert mit den meisten PowerShell-Objekttypen, einschließlich PSCustomObject, PSObject, .NET-Objekte, WMI-Objekte, XML- und JSON-Objekte, Remote-Objekte und CMI-Objekte.

Hier ist ein Beispiel für die Verwendung von Export-HTML:

> Get-Process | Select-Object -Property Name, CPU, Id | Sort-Object -Property CPU -Descending | Export-HTML -Path C:\Process.html

Dieses Beispiel ruft alle laufenden Prozesse ab, wählt nur die Eigenschaften Name, CPU und Id aus, sortiert sie nach der CPU-Auslastung absteigend und exportiert sie als Tabelle in einer HTML-Datei mit dem Namen „Process.html“ im Verzeichnis „C:“.

Export-HTML kann auch mit anderen Cmdlets wie Where-Object und Group-Object kombiniert werden, um die exportierten Daten weiter zu filtern und zu gruppieren.

Hier ist ein weiteres Beispiel für die Verwendung von Export-HTML mit Where-Object:

> Get-Process | Where-Object {$_.CPU -gt 50} | Select-Object -Property Name, CPU, Id | Sort-Object -Property CPU -Descending | Export-HTML -Path C:\HighCPUProcess.html

Dieses Beispiel ruft alle laufenden Prozesse ab, wählt nur die Eigenschaften Name, CPU und Id aus, filtert nur Prozesse mit einer CPU-Auslastung von mehr als 50%, sortiert sie nach der CPU-Auslastung absteigend und exportiert sie als Tabelle in einer HTML-Datei mit dem Namen „HighCPUProcess.html“ im Verzeichnis „C:“.

Export-HTML ist ein leistungsstarkes Tool, um PowerShell-Objekte als Tabellen in HTML-Dateien zu exportieren, die dann in einem Webbrowser angezeigt werden können. Mit Export-HTML können große Mengen von Daten schnell exportiert und in einem übersichtlichen Format dargestellt werden.

Das kann man auch mit Header und CSS kombinieren: