Wie man einen Standardwert mit Read-Host in PowerShell festlegt

  1. Überblick über den Befehl Read-Host in PowerShell
  2. Verwenden Sie eine Bedingungsaussage, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen
  3. Verwenden Sie eine Funktion, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen
  4. Verwenden Sie eine Do-While-Schleife, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen
  5. Fazit
Wie man einen Standardwert mit Read-Host in PowerShell festlegt

PowerShell ist eine leistungsstarke Skriptsprache, die verschiedene Möglichkeiten bietet, mit Benutzern zu interagieren. Eine gängige Methode ist die Verwendung von Read-Host, um Benutzer zur Eingabe aufzufordern.

Es gibt jedoch Szenarien, in denen es vorteilhaft ist, einen Standardwert bereitzustellen. In diesem Leitfaden werden wir verschiedene Methoden untersuchen, um Standardwerte mit Read-Host in PowerShell zu integrieren.

Überblick über den Befehl Read-Host in PowerShell

Read-Host ist ein grundlegendes Cmdlet in PowerShell, das Skripten ermöglicht, mit Benutzern zu interagieren, indem sie zur Eingabe aufgefordert werden. Es ist ein vielseitiges Werkzeug zur Erfassung von Informationen während der Skriptausführung. Dieses Cmdlet ist besonders nützlich in Szenarien, in denen dynamische oder benutzerspezifische Informationen benötigt werden.

Syntax:

Read-Host [-Prompt] <String> [-AsSecureString] [-Credential <PSCredential>] [-ErrorAction <ActionPreference>] [-Timeout <Int32>] [-OutVariable <String>] [-OutBuffer <Int32>] [-InputObject <PSObject>] [<CommonParameters>]

Hier umfassen die wichtigsten Parameter:

  • -Prompt: Gibt die Nachricht an, die dem Benutzer angezeigt wird.
  • -AsSecureString: Fordert die Eingabe als sicheren String (Passwort) an.
  • -Credential: Fordert einen Benutzernamen und ein Passwort an. Gibt ein PSCredential-Objekt zurück.
  • -ErrorAction: Definiert die Aktion, die bei einem Fehler erfolgen soll.
  • -Timeout: Legt eine Zeitbegrenzung fest, wie lange das Cmdlet auf eine Eingabe wartet.
  • -OutVariable: Speichert das Ergebnis in einer Variablen.
  • -OutBuffer: Bestimmt die Anzahl der Objekte, die gepuffert werden sollen, bevor sie ausgegeben werden.
  • -InputObject: Ermöglicht die Eingabe aus der Pipeline.

Grundlegende Verwendung des Befehls Read-Host

$userInput = Read-Host "Please enter your name"

In diesem Beispiel wird der Benutzer mit der Nachricht „Bitte geben Sie Ihren Namen ein“ aufgefordert. Der Wert, den er eingibt, wird in der Variablen $userInput gespeichert.

Sichere String-Eingabe

$securePassword = Read-Host "Please enter your password" -AsSecureString

Dieser Befehl fordert den Benutzer zur Eingabe eines Passworts auf, und die Eingabe wird als sicherer String in der Variablen $securePassword gespeichert.

Timeout-Funktionalität

$userInput = Read-Host "Please enter your choice" -Timeout 10

Dieser Befehl fordert den Benutzer zur Eingabe auf und wartet maximal 10 Sekunden. Wenn in dieser Zeit keine Eingabe erfolgt, ist die Variable $userInput leer.

Sie können Standardwerte mithilfe von Bedingungsaussagen, Funktionen, Schleifen oder Try-Catch-Blöcken in Kombination mit Read-Host integrieren.

Verwenden Sie eine Bedingungsaussage, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen

Erstellen Sie eine Variable namens defaultName und geben Sie ihr den Stringwert John Doe. Dieser Wert wird anstelle der Eingabe des Benutzers verwendet, wenn er sich entscheidet, keinen anzugeben.

$defaultName = "John Doe"

Definieren Sie eine neue Variable, userName, die eine Nachricht erzeugt, die den Benutzer zur Eingabe auffordert und den Befehl Read-Host nutzt, um diese Aktion auszuführen.

$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)

Der folgende Code implementiert eine Bedingung, die überprüft, ob der Benutzer eine Eingabe gegeben hat. Er prüft, ob die Variable $userName null oder ein leerer String ist.

Wenn der Benutzer eine Eingabe gibt (kein leerer String), wird der Wert von $defaultName auf die Eingabe des Benutzers aktualisiert.

if (-not $userName) { $userName = $defaultName }

Vollständiger Code:

$defaultName = "John Doe"
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
if (-not $userName) { $userName = $defaultName }

Write-Host "Hello, $($userName)!"

Ausgabe:

hostbedingung lesen 1

Im nächsten Ansatz verlagern wir den Prozess der Benutzerabfrage in die Bedingung, die überprüft, ob der Benutzer einen Wert eingegeben hat oder nicht. Dadurch können wir besser verfolgen, ob der Benutzer Daten bereitgestellt hat oder nicht.

Ohne ein Handeln des Benutzers verwenden wir den Standardwert John Doe. Wenn der Benutzer jedoch eine Eingabe liefert, verwenden wir den Wert, der in der Variable userName gespeichert ist.

Code:

$defaultName = "John Doe"
if (($userName = Read-Host "Press enter to accept default value $defaultName") -eq '') { $defaultName } else { $userName }

Ausgabe:

Lese Host-Bedingung 2

Der letzte Ansatz überprüft, ob die Eingabe vom Benutzer erfolgt ist, und wenn dies der Fall ist, wird der Wert der Benutzereingabe direkt der Variable mit dem Namen defaultName zugewiesen.

Code:

$defaultName = "John Doe"
if ($userName = Read-Host "Value [$defaultName]") { $defaultName = $userName }

Ausgabe:

Host-Bedingung lesen 3

So muss die else-Bedingung nicht verwendet werden.

Verwenden Sie eine Funktion, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen

Eine Funktion kapselt eine Reihe von Anweisungen, die in Skripten wiederverwendet werden können. Wir werden eine Funktion namens Read-HostWithDefault entwerfen, die Standardwerte integriert.

function Read-HostWithDefault {
    param (
        [string]$prompt,
        [string]$default
    )
    $userInput = Read-Host "$prompt (default is $default)"
    $userInput = if ($userInput -ne "") { $userInput } else { $default }
    return $userInput
}

Erläuterung:

  • function Read-HostWithDefault { ... }: Dies definiert die Funktion namens Read-HostWithDefault.
  • param ( [string]$prompt, [string]$default ): Dies gibt die Parameter an, die die Funktion erwartet. In diesem Fall handelt es sich um eine Aufforderungsnachricht und einen Standardwert.
  • $userInput = Read-Host "$prompt (default is $default)": Diese Zeile fordert den Benutzer zur Eingabe auf, wobei sowohl die Aufforderung als auch der Standardwert angezeigt werden. Die Eingabe wird in der Variablen $userInput gespeichert.
  • $userInput = if ($userInput -ne "") { $userInput } else { $default }: Diese Zeile prüft, ob $userInput kein leerer String ist ($userInput -ne ""). Wenn diese Bedingung wahr ist (das bedeutet, der Benutzer hat eine Eingabe gemacht), bleibt $userInput in seinem Wert. Wenn falsch (was bedeutet, der Benutzer hat keine Eingabe gemacht), wird $default $userInput zugewiesen.
  • return $userInput: Schließlich gibt die Funktion den resultierenden Wert zurück.

Sehen wir uns nun an, wie diese Funktion in einem praktischen Szenario verwendet wird:

$defaultName = "John Doe"
$name = Read-HostWithDefault -prompt "Enter your name" -default $defaultName
Write-Host "Hello, $name!"

Erläuterung:

  • $defaultName = "John Doe": Hier legen wir einen Standardwert für den Namen des Benutzers fest.
  • $name = Read-HostWithDefault -prompt "Geben Sie Ihren Namen ein" -default $defaultName: Diese Zeile fordert den Benutzer zur Eingabe seines Namens auf und zeigt die bereitgestellte Aufforderungsnachricht und den Standardwert an. Die Funktion Read-HostWithDefault wird mit den entsprechenden Parametern aufgerufen.
  • Write-Host "Hallo, $name!": Dies erzeugt eine Begrüßung, die entweder vom Benutzer bereitgestellt wurde oder einen Standardwert darstellt.

Ausgabe:

read host - Funktion

Verwenden Sie eine Do-While-Schleife, um einen Standardwert mit dem Befehl Read-Host in PowerShell festzulegen

Die do-while-Schleife ist eine Kontrollstruktur in PowerShell, die einen Codeblock wiederholt ausführt, solange eine angegebene Bedingung wahr ist. Dies ist besonders nützlich, wenn Sie sicherstellen möchten, dass eine bestimmte Aktion mindestens einmal ausgeführt wird.

Die grundlegende Syntax einer do-while-Schleife ist:

do {
    # Code to be executed
} while (condition)

Der Block von Code innerhalb der do-Anweisung wird weiterhin ausgeführt, solange die nach dem Schlüsselwort while angegebene Bedingung wahr ist.

Lassen Sie uns ein Beispiel betrachten, bei dem wir den Benutzer nach seinem Namen fragen, aber einen Standardwert von „John Doe“ bereitstellen, wenn er nichts eingibt:

$defaultName = "John Doe"

do {
    $userName = Read-Host "Please enter your name (default is $defaultName)"
    $userName = if ($userName) { $userName } else { $defaultName }
} while (-not $userName)

Write-Host "Hello, $userName!"

Erläuterung:

  • $defaultName = "John Doe": Diese Zeile setzt den Standardwert, den wir verwenden möchten, wenn der Benutzer keine Eingabe macht.
  • do { ... } while (-not $userName): Dies initiierte eine do-while-Schleife. Der Codeblock innerhalb der do-Anweisung wird mindestens einmal ausgeführt. Die Bedingung (-not $userName) stellt sicher, dass die Schleife so lange fortgesetzt wird, wie $userName nicht bereitgestellt wird.
  • $userName = Read-Host "Bitte geben Sie Ihren Namen ein (Standard ist $defaultName)": Dies fordert den Benutzer zur Eingabe seines Namens auf und zeigt den Standardwert in der Nachricht an.
  • $userName = if ($userName) { $userName } else { $defaultName }: Diese Zeile verwendet eine if-else-Anweisung, um den Wert von $userName zu bestimmen. Wenn $userName einen Wert hat (d.h. nicht leer oder null ist), behält es diesen Wert bei. Andernfalls wird der Standardname $defaultName zugewiesen.
  • -not $userName: Diese Bedingung überprüft, ob $userName leer oder nicht bereitgestellt ist. Wenn es leer ist, wird die Schleife fortgesetzt und der Benutzer wird erneut aufgefordert.
  • Sobald der Benutzer eine Eingabe gibt, wird die Bedingung -not $userName falsch, und die Schleife endet.

Ausgabe:

lesen Host - solange

Fazit

In diesem umfassenden Leitfaden haben wir verschiedene Methoden untersucht, um Standardwerte mit dem Read-Host-Befehl in PowerShell festzulegen. Jeder Ansatz bietet distinct Vorteile, abhängig von den spezifischen Anforderungen Ihres Skripts.

  • Bedingungsaussagen: Diese Methode ermöglicht eine einfache Überprüfung der Benutzereingabe und bietet Flexibilität im Umgang mit verschiedenen Szenarien.
  • Funktionen: Durch die Kapselung der Logik in einer Funktion können Sie wiederverwendbaren Code erstellen, der Standardwerte nahtlos integriert.
  • Do-While-Schleifen: Dieser Ansatz stellt sicher, dass eine bestimmte Aktion mindestens einmal ausgeführt wird, was ihn für Szenarien geeignet macht, in denen Benutzereingaben entscheidend sind.

Durch das Verständnis und die Anwendung dieser Techniken können Sie die Benutzererfahrung und die Robustheit Ihrer PowerShell-Skripte verbessern. Denken Sie daran, die Methode auszuwählen, die am besten zu den spezifischen Anforderungen Ihres Skripts passt.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Waqar Aslam avatar Waqar Aslam avatar

I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.

LinkedIn