? PowerShell Write-Output: Ihr freundlicher Ausgabe-Begleiter

Sagen Sie auf Wiedersehen zu langweiligen, vorhersehbaren Skriptausgaben! Mit dem PowerShell Write-Output Cmdlet können Sie Ihren PowerShell-Skripten eine Prise Kreativität und Persönlichkeit verleihen.

Das Write-Output Cmdlet ist ein leistungsstarkes Werkzeug und ein perfekter Begleiter für alle Ihre Automatisierungs- und Systemverwaltungsanforderungen. In diesem Tutorial erfahren Sie, wie Sie das Potenzial des Write-Output Cmdlets maximal ausschöpfen können.

Bereit? Lesen Sie weiter und entdecken Sie die Magie des Write-Output Cmdlets!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Um mitzumachen, stellen Sie sicher, dass Sie einen Computer mit PowerShell installiert haben (vorzugsweise die neueste Version). Dieses Tutorial verwendet Windows 10 mit installiertem PowerShell 7.

Objekte in die Konsole ausgeben

Das PowerShell Write-Output Cmdlet schreibt Objekte in den Ausgabestream und zeigt die Ausgabe eines Befehls oder einer Nachricht in der Konsole an. Aber Sie werden überrascht sein, wie dieses Werkzeug die Ausgabe sinnvoller und wertvoller macht.

Statt die Ausgabe in der Konsole anzuzeigen, verwenden Sie das Write-Output-Cmdlet, um die Ausgabe anzupassen. Das Write-Output-Cmdlet kann jedes Objekt oder jeden Datentyp wie Zeichenketten, Ganzzahlen, Arrays und sogar komplexe Objekte ausgeben.

Führen Sie den folgenden Befehl aus, um eine Hallo, Welt!-Nachricht in der Konsole auszugeben.

Write-Output "Hello, World!”

Unten sehen Sie die grundlegendste Funktion des Write-Output-Cmdlets. Aber lesen Sie weiter, um mehr über die fortgeschrittene Verwendung dieses Cmdlets zu erfahren.<>

Outputting objects to the console

Objekte an ein anderes Cmdlet übergeben

Neben der Anzeige der Ausgabe in der Konsole können Sie das Write-Output-Cmdlet verwenden, um das Objekt an ein anderes Cmdlet zur weiteren Verarbeitung zu senden. Wie? Durch Verwendung des Pipe-Operators (|). Pipelining macht Write-Output zu einem praktischen und vielseitigen Befehl für Automatisierungs- und Systemverwaltungsaufgaben.

Angenommen, Sie möchten sehen, welcher Prozess die meisten Ihrer Ressourcen, wie die CPU, verbraucht.

Führen Sie die unten stehenden Befehle aus, um Folgendes zu erreichen:

  • Liste aller auf Ihrem System ausgeführten Prozesse abrufen (Get-Process).
  • Geben Sie die Liste an die Pipeline weiter, die dann an den Befehl Sort-Object übergeben wird. Der Pipeline-Operator ermöglicht es Ihnen, mehrere Befehle miteinander zu verknüpfen und die Ausgabe eines Befehls als Eingabe für einen anderen zu verarbeiten.
  • Sortieren Sie die Liste der Prozesse (Sort-Object) nach ihrer CPU-Auslastung in absteigender Reihenfolge (-Descending).
$processes = Get-Process
Write-Output $processes | Sort-Object CPU -Descending

Beachten Sie, dass Sie jeden der Befehle in diesem Tutorial in ein PowerShell-Skript einfügen und ausführen können.

Die sortierte Liste wird in der Konsole angezeigt, wie unten gezeigt.

Passing objects to another command

Objekte mit einem benutzerdefinierten Format ausgeben

Sie haben das grundlegende Ausgabeformat des Write-Output-Cmdlets gesehen, das gut funktioniert. Wenn Sie möchten, können Sie jedoch auch Objekte mit einem benutzerdefinierten Format ausgeben, um eine persönliche Note hinzuzufügen. Ein benutzerdefiniertes Format kann nützlich sein, wenn Sie bestimmte Eigenschaften von Objekten anzeigen oder das Erscheinungsbild der Ausgabe anpassen möchten.

Um ein Objekt mit einem benutzerdefinierten Format auszugeben, verwenden Sie das Cmdlet Format-Custom zusammen mit dem Cmdlet Write-Output, wie folgt:

um das benutzerdefinierte Ausgabeformat zu erstellen, und leiten Sie dann die Ausgabe des Format-Custom-Cmdlets an Write-Output weiter.<>

Führen Sie den folgenden Befehl aus, der keine Ausgabe erzeugt, sondern ein Objekt (eine Hashtable) erstellt, das drei Eigenschaften mit den entsprechenden Werten enthält, die ausgegeben werden sollen.

$object = [pscustomobject]@{
Property1 = "Value1"
Property2 = "Value2"
Property3 = "Value3"
}

Führen Sie nun den folgenden Befehl aus, um Folgendes durchzuführen:

  • Erstellen Sie ein benutzerdefiniertes Format (Format-Table) für die Ausgabe (Write-Output) Ihrer Hashtable ($object). Die Eigenschaften Property1, Property2 und Property3 werden als Spalten festgelegt.
  • Passen Sie die Spaltenbreiten (-AutoSize) an, um den Inhalt anzupassen.
$object | Format-Table -Property Property1, Property2, Property3 -AutoSize | Write-Output
Creating a custom format for an object output

Alternativ können Sie das Format-List-Cmdlet mit Write-Output verwenden, um das Objekt als Liste von Eigenschafts-Wert-Paaren auszugeben.

$object | Format-List -Property Property1, Property2, Property3 | Write-Output
Outputting the object as a list of property-value pairs

Übergabe eines Sammlungsobjekts als einzelne Einheit

Standardmäßig sendet Write-Output jedes Element der Sammlung einzeln durch die Pipeline, ein Vorgang, der als Enumeration bezeichnet wird. Sie können dieses Verhalten jedoch verhindern, indem Sie den Parameter -NoEnumerate anhängen und das gesamte Sammlungsobjekt als einzelne Einheit übergeben.

Um zu sehen, wie der Parameter -NoEnumerate funktioniert, befolgen Sie diese Schritte:

Führen Sie die folgenden Befehle aus, um Folgendes durchzuführen:

  • Deklarieren Sie ein Array von $numbers von eins bis drei (1,2,3).
  • Zählen Sie die Anzahl der Objekte (Measure-Object), die durch die Pipeline geleitet werden.
  • Geben Sie die Objektmessung aus (Write-Output $numbers).

Ohne den Parameter NoEnumerate gibt Measure-Object eine Anzahl von drei (3) zurück, da jedes Element des Arrays $numbers einzeln aufgezählt und einzeln durch die Pipeline geleitet wurde.

# Deklariert ein Array
$numbers = 1,2,3
# Gibt die Anzahl der Objekte aus, die durch die Pipeline geleitet wurden
Write-Output $numbers | Measure-Object
Outputting an array object measurement

Führen Sie nun die folgenden Befehle aus, um die Anzahl der Objekte auszugeben, die durch die Pipeline geleitet wurden.

Aber da Sie den Parameter -NoEnumerate angehängt haben, behandelt das Measure-Object-Cmdlet das Objekt als einzelne Einheit und gibt eine Anzahl von einem (1) zurück.

# Deklariert ein Array
$numbers = 1,2,3
# Gibt die Anzahl der Objekte als einzelne Einheit aus, die durch die Pipeline geleitet wurden
Write-Output -NoEnumerate $numbers | Measure-Object
Outputting object count as a single entity

Das Umgeben des Write-Output-Befehls mit Klammern (d.h. (Write-Output 1,2,3)) erzwingt eine Aufzählung, unabhängig vom -NoEnumerate-Parameter.

Erstellen eines Menüsystems und Eingabeaufforderungen

Noch eine ausgezeichnete Verwendung des Write-Output-Cmdlets besteht darin, ein Menüsystem mit einem PowerShell-Skript zu erstellen, das den Benutzer nach Eingaben fragt.

Erstellen Sie eine .ps1-Datei mit Ihrem bevorzugten Text-/Code-Editor, fügen Sie den untenstehenden Code ein und speichern Sie die Datei. Sie können die Datei nach Belieben benennen, aber in diesem Tutorial wird sie myoutput.ps1 genannt.

Der folgende Code verwendet eine Schleife, um den Benutzer kontinuierlich zur Auswahl einer Option aus einer Liste von Optionen aufzufordern, bis der Benutzer die Option Exit auswählt.

# Initialisiere die Variable $exit auf $false
$exit = $false

# Starte eine Schleife, die läuft, bis der Benutzer die Option "Beenden" auswählt
while (!$exit) {

  # Zeige dem Benutzer eine Liste von Optionen an
  Write-Output "Please select from the following options:"
  Write-Output "1. Option 1"
  Write-Output "2. Option 2"
  Write-Output "3. Option 3"
  Write-Output "4. Exit"

  # Fordere den Benutzer zur Auswahl auf
  $selection = Read-Host

  # Verwende eine Switch-Anweisung, um verschiedene Codes basierend auf der Auswahl des Benutzers auszuführen
  switch ($selection) {
    1 {
      # Wenn der Benutzer Option 1 auswählt, zeige eine Nachricht an und führe etwas für Option 1 aus
      Write-Output "You selected Option 1."
      # Führe etwas für Option 1 aus
    }
    2 {
      # Wenn der Benutzer Option 2 auswählt, zeige eine Nachricht an und führe etwas für Option 2 aus
      Write-Output "You selected Option 2."
      # Führe etwas für Option 2 aus
    }
    3 {
      # Wenn der Benutzer Option 3 auswählt, zeige eine Nachricht an und führe etwas für Option 3 aus
      Write-Output "You selected Option 3."
      # Führe etwas für Option 3 aus
    }
    4 {
      # Wenn der Benutzer Option 4 auswählt, setze $exit auf $true, um die Schleife zu beenden
      $exit = $true
    }
  }
}

Führe nun das Skript (myoutput.ps1) aus dem Arbeitsverzeichnis aus.

./myoutput.ps1

Wie unten gezeigt, wird die mit Ihrer Auswahl verbundene Nachricht angezeigt, wenn Sie die Optionen 1, 2 oder 3 wählen. Wenn Sie jedoch Option 4 auswählen, wird das Skript beendet.

Creating a menu system and input prompts

Anzeigen eines Startbildschirms oder einer Begrüßungsnachricht

Abgesehen von der Auflistung der Optionen, aus denen die Benutzer wählen können, können Sie mit Write-Output auch einen Begrüßungsbildschirm oder eine Willkommensnachricht anzeigen. Ansprechende Begrüßungsbildschirme hinterlassen einen guten Eindruck (professionell und poliert) bei Ihrem Skript.

Ersetzen Sie den Code in Ihrer myoutput.ps1 Datei durch den untenstehenden, der einen Begrüßungsbildschirm (einen Banner einer Willkommensnachricht) ausgibt, wenn Sie Ihr Skript ausführen.

Sie können den Begrüßungsbildschirm anpassen, indem Sie den Text und das Format des Banners ändern. Sie können zusätzliche Elemente wie ein Logo oder Text zum Begrüßungsbildschirm hinzufügen, wie gewünscht.

# Bildschirm löschen
Clear-Host

# Den Begrüßungsbildschirm mit Write-Output anzeigen
Write-Output "##############################################"
Write-Output "#                                            #"
Write-Output "#   Welcome to the SuperScript 3000!         #"
Write-Output "#                                            #"
Write-Output "##############################################"

Führen Sie nun das Skript aus und sehen Sie, wie Ihr Begrüßungsbildschirm aussieht.

./myoutput.ps1
Displaying a splash screen or welcome message

Anzeigen einer Fortschrittsanzeige

Beim Ausführen von Skripts beseitigt ein Fortschrittsanzeiger die Angst des Benutzers, ob das Skript läuft oder nicht. Fortschrittsanzeigen können nützlich sein, um dem Benutzer den Fortschritt eines lang laufenden Skripts oder einer Operation anzuzeigen. Glücklicherweise können Sie mit dem Write-Output-Befehl eine Fortschrittsanzeige nach Ihren Wünschen erstellen.

Öffnen Sie Ihre myoutput.ps1 Datei und fügen Sie den untenstehenden Code am Ende des vorhandenen in der Skriptdatei hinzu.

Der untenstehende Code verwendet eine while-Schleife, um durch mehrere Schritte zu iterieren. In diesem Beispiel 100 Schritte. Jede Iteration der Schleife berechnet den Prozentsatz der abgeschlossenen Schritte und zeigt eine Fortschrittsanzeige mit Write-Output an.

Die Fortschrittsanzeige wird mithilfe einer Kombination der folgenden Operatoren erstellt:

  • * – Wiederholt einen String eine angegebene Anzahl von Malen
  • $() – Ermöglicht es, den Ausdruck in einen String einzubeziehen.

Das Skript pausiert dann (Start-Sleep) für 1 Sekunde, um den Fortschritt zu simulieren, bevor es zum nächsten Schritt übergeht.

# Setzen Sie die Gesamtanzahl der Schritte für die Fortschrittsleiste
$steps = 100

# Initialisieren Sie den Zähler für den aktuellen Schritt
$currentStep = 0

# Starten Sie eine Schleife, die für die Anzahl der Schritte ausgeführt wird
while ($currentStep -lt $steps) {
  # Inkrementieren Sie den Zähler für den aktuellen Schritt
  $currentStep++

  # Berechnen Sie den Prozentsatz der abgeschlossenen Schritte
  $percentComplete = [int] ($currentStep / $steps * 100)

  # Zeigen Sie eine Fortschrittsleiste mit Write-Output an
  Write-Output "Progress: [$("=" * $percentComplete)$(" " * ($steps-$percentComplete))] $percentComplete% complete"

  # Pausieren Sie für 1 Sekunde, um den Fortschritt zu simulieren
  Start-Sleep -Seconds 1
}

Jetzt führen Sie das Skript aus und sehen, wie die Fortschrittsleiste funktioniert.

./myoutput.ps1

Unten sehen Sie den Startbildschirm zusammen mit der Fortschrittsleiste.

Displaying a progress bar

Fazit

In diesem Tutorial haben Sie gesehen, wie Write-Output leicht Objekte, Datentypen und benutzerdefinierte Formate ausgeben kann. Außerdem haben Sie erfahren, wie Sie den Pipeline-Operator verwenden, um Ausgaben an andere Befehle zur weiteren Verarbeitung zu senden.

Ob Sie eine einfache Nachrichtenausgabe oder komplexe Automatisierungsaufgaben schreiben, ist `Write-Output` ein unverzichtbares Werkzeug zur Erstellung informativerer und professioneller PowerShell-Skripte.

Mit diesem neu gewonnenen Wissen, warum nicht Ihre Ausgaben in verschiedene Dateitypen schreiben, wie `.txt` und `.xml` Dateien?

Source:
https://adamtheautomator.com/powershell-write-output/