Cómo establecer un valor predeterminado con Read-Host en PowerShell

  1. Descripción general del comando Read-Host en PowerShell
  2. Usar una declaración condicional para establecer un valor predeterminado con el comando Read-Host en PowerShell
  3. Usar una función para establecer un valor predeterminado con el comando Read-Host en PowerShell
  4. Usar un bucle Do-While para establecer un valor predeterminado con el comando Read-Host en PowerShell
  5. Conclusión
Cómo establecer un valor predeterminado con Read-Host en PowerShell

PowerShell es un poderoso lenguaje de secuencias de comandos que proporciona varias maneras de interactuar con los usuarios. Un método común es usar Read-Host para solicitar a los usuarios que ingresen información.

Sin embargo, hay escenarios donde proporcionar un valor predeterminado es beneficioso. En esta guía, exploraremos diferentes métodos para incorporar valores predeterminados con Read-Host en PowerShell.

Descripción general del comando Read-Host en PowerShell

Read-Host es un cmdlet fundamental en PowerShell que permite a los scripts interactuar con los usuarios pidiéndoles que ingresen información. Es una herramienta versátil para recopilar información durante la ejecución del script. Este cmdlet es particularmente útil en escenarios donde se necesita información dinámica o específica del usuario.

Sintaxis:

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

Aquí, los parámetros clave incluyen:

  • -Prompt: Especifica el mensaje que se mostrará al usuario.
  • -AsSecureString: Solicita la entrada como una cadena segura (contraseña).
  • -Credential: Solicita un nombre de usuario y una contraseña. Devuelve un objeto PSCredential.
  • -ErrorAction: Define la acción a tomar si ocurre un error.
  • -Timeout: Establece un límite de tiempo sobre cuánto tiempo esperará el cmdlet para recibir una entrada.
  • -OutVariable: Almacena el resultado en una variable.
  • -OutBuffer: Determina la cantidad de objetos a almacenar en búfer antes de la salida.
  • -InputObject: Permite la entrada desde la canalización.

Uso básico del comando Read-Host

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

En este ejemplo, se solicitará al usuario con el mensaje "Por favor ingrese su nombre". El valor que ingresen se almacenará en la variable $userInput.

Entrada de cadena segura

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

Este comando solicita al usuario una contraseña, y la entrada se almacena como una cadena segura en la variable $securePassword.

Funcionalidad de tiempo de espera

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

Este comando solicita al usuario una entrada y esperará un máximo de 10 segundos. Si no se proporciona ninguna entrada dentro de ese tiempo, la variable $userInput estará vacía.

Puedes incorporar valores predeterminados utilizando declaraciones condicionales, funciones, bucles o bloques de intento-captura en combinación con Read-Host.

Usar una declaración condicional para establecer un valor predeterminado con el comando Read-Host en PowerShell

Crea una variable llamada defaultName y asígnale el valor de cadena John Doe. Este valor se utilizará en lugar de la entrada del usuario si elige no proporcionar una.

$defaultName = "John Doe"

Define una nueva variable, userName, que producirá un mensaje pidiendo al usuario que ingrese información y utilizará el comando Read-Host para realizar esta acción.

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

El código que se muestra a continuación implementa una condición que verifica si el usuario ha proporcionado alguna entrada. Verifica si la variable $userName es nula o una cadena vacía.

Si el usuario proporciona alguna entrada (no una cadena vacía), actualiza el valor de $defaultName con la entrada del usuario.

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

Código completo:

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

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

Salida:

leer host condicional 1

En el siguiente enfoque, reubicamos el proceso de recibir la entrada del usuario dentro de la condición que verifica si el usuario ha ingresado algún valor o no. Esto nos permite seguir mejor si el usuario ha proporcionado o no algún dato.

Sin ninguna acción por parte del usuario, utilizamos el valor predeterminado, John Doe. Sin embargo, si el usuario ofrece una entrada, utilizamos el valor guardado en la variable userName.

Código:

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

Salida:

leer host condicional 2

El último enfoque verifica que se dé la entrada por parte del usuario, y si lo hace, asigna directamente el valor de la entrada del usuario a la variable llamada defaultName.

Código:

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

Salida:

leer host condicional 3

De esta manera, no necesita utilizar la condición else.

Usar una función para establecer un valor predeterminado con el comando Read-Host en PowerShell

Una función encapsula un conjunto de instrucciones que pueden reutilizarse a través de scripts. Diseñaremos una función llamada Read-HostWithDefault que incorpora valores predeterminados.

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

Explicación:

  • function Read-HostWithDefault { ... }: Esto define la función llamada Read-HostWithDefault.
  • param ( [string]$prompt, [string]$default ): Esto especifica los parámetros que la función espera. En este caso, es un mensaje de aviso y un valor predeterminado.
  • $userInput = Read-Host "$prompt (el predeterminado es $default)": Esta línea solicita al usuario que ingrese información, mostrando tanto el aviso como el valor predeterminado. La entrada se almacena en la variable $userInput.
  • $userInput = if ($userInput -ne "") { $userInput } else { $default }: Esta línea verifica si $userInput no es una cadena vacía ($userInput -ne ""). Si esta condición es verdadera (lo que significa que el usuario proporcionó entrada), $userInput retiene su valor. Si es falsa (lo que significa que el usuario no proporcionó entrada), $default se asigna a $userInput.
  • return $userInput: Finalmente, la función devuelve el valor resultante.

Ahora, veamos cómo usar esta función en un escenario práctico:

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

Explicación:

  • $defaultName = "John Doe": Aquí, establecemos un valor predeterminado para el nombre del usuario.
  • $name = Read-HostWithDefault -prompt "Ingresa tu nombre" -default $defaultName: Esta línea solicita al usuario su nombre, mostrando el mensaje de aviso proporcionado y el valor predeterminado. La función Read-HostWithDefault se llama con los parámetros apropiados.
  • Write-Host "¡Hola, $name!": Esto genera un saludo que puede ser proporcionado por el usuario o un valor predeterminado.

Salida:

leer anfitrión - función

Usar un bucle Do-While para establecer un valor predeterminado con el comando Read-Host en PowerShell

El bucle do-while es una estructura de control en PowerShell que ejecuta repetidamente un bloque de código mientras una condición especificada sea verdadera. Esto es particularmente útil cuando deseas asegurarte de que se realice una cierta acción al menos una vez.

La sintaxis básica de un bucle do-while es:

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

El bloque de código dentro de la declaración do continuará ejecutándose siempre que la condición especificada después de la palabra clave while sea verdadera.

Consideremos un ejemplo en el que queremos pedir al usuario su nombre, pero proporcionar un valor predeterminado de "John Doe" si no ingresan nada:

$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!"

Explicación:

  • $defaultName = "John Doe": Esta línea establece el valor predeterminado que queremos usar si el usuario no proporciona ninguna entrada.
  • do { ... } while (-not $userName): Esto inicia un bucle do-while. El bloque de código dentro de la declaración do se ejecutará al menos una vez. La condición (-not $userName) asegura que el bucle continúe mientras $userName no se proporcione.
  • $userName = Read-Host "Por favor ingresa tu nombre (el predeterminado es $defaultName)": Esto solicita al usuario su nombre, mostrando el valor predeterminado en el mensaje.
  • $userName = if ($userName) { $userName } else { $defaultName }: Esta línea utiliza una declaración if-else para determinar el valor de $userName. Si $userName tiene un valor (es decir, no está vacío o es nulo), mantiene ese valor. De lo contrario, asigna el nombre predeterminado $defaultName.
  • -not $userName: Esta condición verifica si $userName está vacío o no se ha proporcionado. Si está vacío, el bucle continuará, solicitando al usuario nuevamente.
  • Una vez que el usuario proporciona entrada, la condición -not $userName se vuelve falsa y el bucle termina.

Salida:

leer host - hacer mientras

Conclusión

En esta guía completa, exploramos varios métodos para establecer valores predeterminados con el comando Read-Host en PowerShell. Cada enfoque ofrece ventajas distintas según los requisitos específicos de tu script.

  • Declaraciones condicionales: Este método permite una verificación sencilla de la entrada del usuario y proporciona flexibilidad para manejar diferentes escenarios.
  • Funciones: Al encapsular la lógica en una función, puedes crear código reutilizable que incorpore valores predeterminados sin problemas.
  • Bucles Do-While: Este enfoque asegura que se realice una cierta acción al menos una vez, lo que lo hace adecuado para escenarios donde la entrada del usuario es crucial.

Al comprender y aplicar estas técnicas, puedes mejorar la experiencia del usuario y la resiliencia de tus scripts de PowerShell. Recuerda elegir el método que mejor se alinee con los requisitos específicos de tu script.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
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