Windows Server 2025 / PowerShell: Objekte, Pipelines und Abfragen

PowerShell verarbeitet Objekte, also Daten mit Eigenschaften, und nicht nur den sichtbaren Konsolentext. Kombinieren Sie Abfragebefehle mit Where-Object, Select-Object und Sort-Object, um Serverinformationen nach ausdrücklich angegebenen Bedingungen zu filtern, zu sortieren und auszuwählen.

Prüfen Sie die Konsole und verwenden Sie die Hilfe

Öffnen Sie Windows PowerShell auf dem Server, den Sie abfragen möchten. Diese reinen Leseabfragen richten sich an Windows PowerShell 5.1 unter Windows Server 2025; prüfen Sie in der ersten Ausgabe PSVersion und PSEdition. Eine separat installierte PowerShell 7 kann andere Modulkompatibilität aufweisen. Die Befehle untersuchen den Computer der aktuellen Sitzung: Auf einem Verwaltungs-PC liefern sie dessen Daten. Eingeschränkte Konten sehen möglicherweise weniger Informationen, auch wenn die Abfrage selbst nichts verändert.

$PSVersionTable
Get-Command Get-Service
Get-Help Get-Service -Examples

Get-Command prüft, ob Get-Service verfügbar ist; Get-Help erläutert Verwendung und Parameter, und -Examples fordert Beispiele an. Fehlt lokale Hilfe, lesen Sie die offizielle Referenz derselben Version, statt ein heruntergeladenes Hilfeskript auszuführen. Verb-Substantiv-Namen geben einen Hinweis auf die Absicht: Get fragt meist ab, Set konfiguriert. Prüfen Sie trotzdem die Hilfe des jeweiligen Befehls.

Prüfen Sie Eigenschaften vor der Verarbeitung

Ein Dienstobjekt besitzt Eigenschaften wie Name, DisplayName (Anzeigename) und Status. Verwenden Sie diese Felder, statt sichtbaren Text nach Spaltenpositionen zu zerlegen. Die erste Zeile zeigt höchstens fünf Dienste, die zweite untersucht die Mitglieder des Objekttyps und die dritte wählt die drei Eigenschaften von WinRM aus. Siehe PowerShell-Objekte und ihre Eigenschaften.

Get-Service | Select-Object -First 5
Get-Service | Get-Member
Get-Service -Name WinRM | Select-Object Name,DisplayName,Status

In Get-Member unterscheidet MemberType Eigenschaften von Methoden: Eigenschaften enthalten Daten, Methoden können Aktionen auslösen. Rufen Sie eine Methode nicht nur deshalb auf, weil ihr Name hilfreich klingt. Diese Lektion fragt Dienste ab und filtert sie, ohne sie zu starten oder zu stoppen. Prüfen Sie in der letzten Ausgabe die Spalten Name, DisplayName und Status für WinRM.

Verbinden Sie Befehle durch eine Pipeline

Der senkrechte Strich | verbindet Befehle in einer PowerShell-Pipeline und übergibt Objekte an den nächsten Schritt. Where-Object behält Dienste mit Status Running, Sort-Object sortiert nach Name und Select-Object wählt die ausgegebenen Eigenschaften. $_ steht für das gerade verarbeitete Objekt:

Get-Service |
    Where-Object { $_.Status -eq 'Running' } |
    Sort-Object Name |
    Select-Object Name,DisplayName,Status

Ändern Sie zum Vergleich nur Running in Stopped, führen Sie die Abfrage erneut aus, beobachten Sie die andere Ergebnismenge und setzen Sie den Filter wieder auf Running. Die Filteränderung startet oder stoppt keine Dienste. -eq prüft Gleichheit, -ne Ungleichheit, -gt einen größeren Wert und -like Muster mit Platzhaltern. Beachten Sie bei Zahlen die Datentypen: Textsortierung entspricht nicht unbedingt numerischer Sortierung.

Verwenden Sie Variablen und explizite Einheiten

Die folgende Abfrage speichert Objekte lokaler logischer Laufwerke und berechnet Kapazität und freien Platz in Gibibyte (GiB). Laut Win32_LogicalDisk-Dokumentation wählt DriveType=3 lokale Laufwerke; Size und FreeSpace werden in Byte angegeben. Die PowerShell-Konstante 1GB entspricht 1.073.741.824 Byte und damit einem GiB. Die Spaltennamen kennzeichnen diese binäre Einheit:

$labDisks = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3'
$labDisks | Select-Object DeviceID,
    @{Name='SizeGiB';Expression={[math]::Round($_.Size / 1GB,1)}},
    @{Name='FreeGiB';Expression={[math]::Round($_.FreeSpace / 1GB,1)}}

Erwarten Sie die Spalten DeviceID, SizeGiB und FreeGiB. DeviceID identifiziert das Laufwerk; die anderen Spalten zeigen Gesamtkapazität und freien Platz, auf eine Nachkommastelle gerundet. Werte und Zeilenanzahl hängen von den vorhandenen Laufwerken ab. $labDisks behält die Laufwerksobjekte und lässt sich erneut filtern. Verwenden Sie Format-Table erst für die abschließende Anzeige: Es erzeugt Formatierungsobjekte. Vor einem Export in kommaseparierte Werte (CSV) würden dadurch Formatierungsdaten statt der gewünschten Spalten exportiert. Behalten Sie für den Datenexport die Objekte bei und wählen Sie deren Eigenschaften vor Export-Csv aus.

Halten Sie Abfragen und Änderungen getrennt

  1. Verwenden Sie Get-Command und Get-Help, um Befehl und Parameter zu bestimmen.
  2. Zeichnen Sie aktuelle Werte mit Abfragebefehlen auf.
  3. Unterstützt ein Änderungsbefehl -WhatIf, prüfen Sie damit die vorgeschlagene Aktion.
  4. Bewerten Sie betriebliche Folgen und Wiederherstellung unabhängig von der Vorschau.
  5. Bewahren Sie eine lesbare .ps1-Datei auf und notieren Sie Zielcomputer und Ausführungskontext.

Ein nicht gefundener Befehl kann durch einen Schreibfehler, ein fehlendes Modul oder eine andere PowerShell-Version entstehen; das ist kein verweigerter Zugriff. Sie können diese Abfragen direkt in die Konsole eingeben. Das Speichern als .ps1-Datei erlaubt nicht automatisch die Dateiausführung. Beachten Sie die Ausführungsrichtlinie und die Signaturanforderungen Ihrer Organisation, statt Schutzfunktionen gemeinsam abzuschalten, um ein Skript auszuführen.