¿Cómo solicitar entrada en PowerShell?
PowerShell proporciona varias formas de solicitar la entrada del usuario para realizar diferentes acciones. Esto le permite crear scripts flexibles, personalizables e interactivos que pueden aceptar configuraciones, parámetros y opciones de tiempo de ejecución dinámico en lugar de valores codificados. En esta guía completa, exploraremos los diversos métodos disponibles en PowerShell para solicitar la entrada del usuario. Ya sea leyendo entradas desde la línea de comandos, mostrando ventanas emergentes de GUI, ofreciendo opciones de menú o validando valores, PowerShell proporciona opciones sólidas para crear experiencias de entrada fáciles de usar.
Introducción a PowerShell Solicitud de entrada del usuario
Solicitar la entrada del usuario le permite crear scripts de PowerShell flexibles que pueden aceptar parámetros, opciones y otros valores de los usuarios en tiempo de ejecución. Algunas razones comunes para solicitar información incluyen:
- Solicitar a los usuarios que ingresen credenciales para la autenticación
- Obtener opciones de los usuarios para determinar el flujo y la lógica del script
- Aceptar nombres de archivos, rutas y otros valores de entrada para usar en el script
- Validar la entrada solicitando a los usuarios que confirmen los valores
- Crear menús interactivos para brindar opciones a los usuarios.
PowerShell proporciona cmdlets, host de lectura, parámetros y argumentos, cuadros de entrada y otras técnicas para avisar al usuario de forma adecuada. Con la solicitud de PowerShell para la entrada del usuario, puede solicitar a los usuarios información como rutas de archivos, nombres de usuarios, contraseñas y otros parámetros necesarios para que el script se ejecute correctamente.
Beneficios de utilizar la solicitud de PowerShell para la entrada del usuario
Uno de los principales beneficios de utilizar el indicador de PowerShell para la entrada del usuario es que hace que sus scripts sean más interactivos. Puede solicitar a los usuarios que introduzcan datos y luego utilizarlos para realizar determinadas tareas dentro del script. Esto puede hacer que sus scripts sean más flexibles y fáciles de usar. Además, una solicitud de PowerShell para la entrada del usuario puede ayudarle a automatizar ciertas tareas que de otro modo requerirían intervención manual. Esto puede ahorrarle tiempo y aumentar la eficiencia dentro de su organización.
Uso del cmdlet Read-Host para solicitar la entrada del usuario en PowerShell
La forma más sencilla de obtener información del usuario en PowerShell es mediante el cmdlet Read-Host. Este cmdlet solicita información al usuario y espera a que escriba una respuesta. Se puede utilizar para recopilar varios tipos de entradas, como cadenas, números y cadenas seguras.
La sintaxis básica para la solicitud de PowerShell para la entrada del usuario es la siguiente:
Read-Host [-Prompt] <String> [-AsSecureString] [-MaskInput] [<CommonParameters>]
- -Prompt: especifica el mensaje de texto que se muestra al usuario. Este parámetro es posicional y se puede utilizar sin nombrarlo explícitamente. Por ejemplo, Read-Host "Ingrese su nombre". La salida del cmdlet Read-Host es un objeto de cadena.
- -AsSecureString: Indica que la entrada debe tratarse como una cadena segura. Esto es útil para contraseñas u otra información confidencial, ya que la entrada está enmascarada y almacenada en un objeto System.Security.SecureString.
- MaskInput: este parámetro indica que la entrada debe estar enmascarada, similar a los campos de contraseña en las aplicaciones GUI. Está disponible a partir de PowerShell 7.2.
A continuación se muestra un ejemplo de cómo obtener entradas mediante el cmdlet Read-Host.
# Prompt for a string input
$name = Read-Host -Prompt "Enter your name"
#Get the input and store it in $Age variable name - without Prompt parameter
$Age = Read-Host "Please enter your age"
Write-Host "Hello $Name, welcome to my script!"
Este script muestra al usuario un mensaje y luego asigna la entrada del usuario a una variable. La entrada se mostrará como un mensaje personalizado.
Cuando el usuario ingresa un valor y presiona la tecla "Entrar" en la consola de Windows PowerShell, el valor ingresado se almacena como un objeto de cadena de texto sin formato en la variable $nombre. PowerShell agregará dos puntos al final de la cadena del mensaje.
Algunos parámetros útiles para Read-Host incluyen:
- Aviso: especifica el texto del aviso que se mostrará al usuario. Si la cadena incluye espacios, escríbala entre comillas.
- AsSecureString: el parámetro AsSecureString enmascara la entrada del usuario, como para las contraseñas.
- MaskInput: enmascara cada carácter como un * tal como se ingresa
Por ejemplo, para solicitar una contraseña:
# Prompt for a secure string input (password)
$Password = Read-Host -Prompt "Enter your password" -AsSecureString
Este ejemplo solicita al usuario su contraseña. Cuando se ingresa una entrada, se muestran asteriscos (*) en lugar de los caracteres en la consola en lugar de la entrada real.
Obtener confirmación del usuario
También puede utilizar Read-Host para solicitar a los usuarios que confirmen una acción. Por ejemplo:
$Confirm = Read-Host -Prompt "Are you sure you want to delete the file (Y/N)"
if ($confirm -eq 'y') {
# Delete file
} else {
Write-Host "Deletion cancelled"
}
Esto muestra un mensaje que solicita confirmación antes de eliminar un archivo. Esto valida la entrada y se ejecuta el bloque de código apropiado. Tenga en cuenta que Read-Host solo puede aceptar 8190 caracteres como entrada de un usuario.
Solicitar entrada del usuario con parámetros en scripts
Para entradas más complejas, puede aceptar parámetros y argumentos al ejecutar sus scripts de PowerShell. Los parámetros le permiten ingresar valores con nombre, como -Nombre o -Ruta.
Por ejemplo, podemos definir un script de PowerShell llamado install-script.ps1 que acepte parámetros:
param(
[string]$Name,
[string]$Path
)
Write-Output "Installing $Name to path $Path"
Luego podemos ejecutar esto y pasar valores de entrada:
.\install-script.ps1 -Name MyApp -Path C:\Apps
Para solicitar opciones, puede utilizar conjuntos de parámetros para aceptar diferentes combinaciones de entrada de parámetros. También puede aceptar la entrada de argumentos para valores posicionales. Por lo tanto, la combinación de parámetros y argumentos permite indicaciones de entrada sólidas. Más aquí: Parámetros de la función PowerShell
Esperando la entrada del usuario
En algunos escenarios, es posible que deba esperar la entrada continua del usuario. Puede lograr esto utilizando un bucle Read-Host, que permite a los usuarios proporcionar información varias veces hasta que decidan salir.
# Initialize a flag to control the loop
$continue = $true
# Start the loop
while ($continue) {
$input = Read-Host "Enter some input or type 'Q' to quit"
if ($input -eq "q") {
# If the user enters 'exit', set the flag to false to exit the loop
$continue = $false
} else {
# Process the user's input (in this example, we just display it)
Write-Host "You entered: $input"
}
}
Write-Host "User chose to exit. Script completed."
Puede modificar el script para incluir lógica o acciones más complejas basadas en la entrada del usuario o en requisitos específicos.
Validar la entrada del usuario
Puede validar la entrada del usuario para que coincida con una condición o criterio específico. Veamos cómo utilizar la validación de entrada mediante un bucle. Por ejemplo, desea obtener el parámetro de edad del usuario.
# Promp for user input with validation
Do {
$Age = Read-Host -Prompt "Please enter your age"
} While ($Age -notmatch '^\d+$')
# Output the entered age
Write-Host "You entered age: $Age"
Esto le pedirá que ingrese un número válido.
De manera similar, puede utilizar la condición IF para validar y tomar medidas en función de la entrada del usuario.
$userInput = Read-Host "Enter a number between 1 and 10"
if ($userInput -ge 1 -and $userInput -le 10) {
Write-Host "Valid input: $userInput"
} else {
Write-Host "Invalid input. Please enter a number between 1 and 10."
}
Si está utilizando parámetros de función, puede validar la entrada del usuario con atributos: ValidateSet, ValidateRange, ValidatePattern, etc. Más aquí: Validación de parámetros de función en PowerShell
Implementación de un menú para solicitar la entrada del usuario
Para proporcionar opciones de menú interactivas, puede usar Read-Host dentro de un bucle para mostrar opciones y obtener opciones de menú. Por ejemplo, cree un menú simple que permita al usuario realizar tareas básicas del sistema, como verificar la información del sistema, enumerar archivos en un directorio y apagar la computadora:
# Define a function to display the system operations menu
function Show-SystemMenu {
Clear-Host # Clear the console to keep it clean
Write-Host "=== System Operations Menu ==="
Write-Host "1. Display System Information"
Write-Host "2. List Files in a Directory"
Write-Host "3. Shut Down Computer"
Write-Host "4. Exit"
}
# Display the system operations menu initially
Show-SystemMenu
# Start the menu loop
while ($true) {
$choice = Read-Host "Select an operation (1-4):"
# Validate user input
if ($choice -match '^[1-4]$') {
switch ($choice) {
1 {
# Display system information
Write-Host "System Information:"
Get-ComputerInfo | Format-Table -AutoSize
Read-Host "Press any key to continue..."
}
2 {
# List files in a directory
$directory = Read-Host "Enter the directory path:"
Get-ChildItem -Path $directory
Read-Host "Press any key to continue..."
}
3 {
# Shut down the computer
Write-Host "Shutting down the computer..."
#Stop-Computer -Force
}
4 { exit } # Exit the loop when 'Exit' is selected
}
}
else {
Write-Host "Invalid input. Please select a valid option (1-4)."
Start-Sleep -Seconds 2 # Pause for 2 seconds to display the message
}
# Redisplay the system operations menu
Show-SystemMenu
}
Esto muestra un menú, solicita opciones y ejecuta diferentes bloques de código según la opción de menú elegida con una instrucción de cambio.
Creación de ventanas emergentes de confirmación y mensajes de cuadro de entrada
Si necesita una forma más interactiva y fácil de usar para solicitar entradas, puede crear cuadros de entrada emergentes utilizando el espacio de nombres System.Windows.Forms. Este enfoque le permite diseñar interfaces gráficas de usuario (GUI) para sus scripts.
Add-Type -AssemblyName System.Windows.Forms
$InputBox = [System.Windows.Forms.MessageBox]::Show("Do you want to continue?", "Confirmation", [System.Windows.Forms.MessageBoxButtons]::YesNo)
$InputBox
Aquí hay otro con icono:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$UserInput = [System.Windows.Forms.MessageBox]::Show("Do you want to proceed execution?","Continue script execution" , "YesNo", "Question")
La creación de un cuadro de entrada gráfico puede mejorar significativamente la experiencia del usuario, especialmente para usuarios sin conocimientos técnicos.
También puede utilizar el objeto Windows Script Host para mostrar un mensaje emergente:
$Prompt = New-Object -ComObject wscript.shell
$UserInput = $Prompt.popup("Do you want to proceed execution?",0,"Continue script execution",4+32)
If($UserInput -eq 6)
{
Write-host -f Green "Script Execution Continued..."
}
Else
{
Write-host -f Yellow "Script Execution Aborted!"
}
Solicitar entrada mediante cuadros de entrada
Para proporcionar un mensaje interactivo para la entrada, puede crear un cuadro de entrada. Por ejemplo:
# Prompt the user for input using InputBox
$input = [Microsoft.VisualBasic.Interaction]::InputBox("Please enter your name:", "User Input", "")
# Check if the user provided input
if ([string]::IsNullOrWhiteSpace($input)) {
Write-Host "User canceled input."
} else {
Write-Host "You entered: $input"
}
Esto muestra una ventana emergente de entrada para el usuario. Puede verificar la entrada y continuar la ejecución del script en función de ella.
Obtenga información del usuario con la GUI de PowerShell
Si bien la solicitud de PowerShell para la entrada del usuario es una característica poderosa, existen alternativas que puede usar según sus necesidades. Una de esas alternativas es la entrada emergente de PowerShell. Esta característica le permite crear una interfaz gráfica de usuario (GUI) que solicita a los usuarios información. Aquí hay un ejemplo:
# Load the System.Windows.Forms assembly
Add-Type -AssemblyName System.Windows.Forms
# Create a form object
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Enter the value"
$Form.Size = New-Object System.Drawing.Size(300,200)
$Form.StartPosition = "CenterScreen"
# Create a label to display instructions
$label = New-Object Windows.Forms.Label
$label.Text = "Enter your input:"
$label.Location = New-Object Drawing.Point(20, 20)
$form.Controls.Add($label)
# Create an OK button
$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(100,75)
$Button.Size = New-Object System.Drawing.Size(100,30)
$Button.DialogResult = [Windows.Forms.DialogResult]::OK
$Button.Text = "OK"
$Form.Controls.Add($Button)
# Create a text box for user input
$InputBox = New-Object System.Windows.Forms.TextBox
$InputBox.Location = New-Object System.Drawing.Point(50,50)
$InputBox.Size = New-Object System.Drawing.Size(200,20)
$Form.Controls.Add($InputBox)
# Show the form as a dialog box
$Result = $Form.ShowDialog()
# Check if the OK button was clicked
if ($Result -eq [Windows.Forms.DialogResult]::OK) {
$userInput = $InputBox.Text
Write-Host "You entered: $userInput"
}
# Dispose of the form
$form.Dispose()
Este ejemplo crea una GUI que solicita al usuario una entrada y luego muestra la entrada en la consola.
Hay varios recursos disponibles para ayudarle a dominar la solicitud de PowerShell para la entrada del usuario. Aquí está la documentación oficial sobre el mensaje Read-Host para la entrada del usuario: Read-Host Cmdlet Microsoft Docs
Resumen
En esta guía completa, cubrimos la entrada básica de la consola, la obtención de confirmación de los usuarios, los cuadros de entrada de la GUI, los scripts parametrizados y los menús para la interacción continua del usuario. Al dominar estos conceptos y ejemplos del mundo real, estará bien equipado para crear scripts de PowerShell interactivos y fáciles de usar:
- Cmdlet Read-Host para solicitar entrada
- Aceptar parámetros y argumentos.
- Cuadros de entrada a través de WinForms
- Menús usando Read-Host en un bucle
El uso de estas técnicas de solicitud permite la creación de scripts que pueden aceptar la configuración del tiempo de ejecución y las entradas de los usuarios de una manera amigable. Esto proporciona más flexibilidad que los valores codificados y mejora la automatización. Si sigue los métodos descritos en este artículo, podrá dominar el uso de esta función y crear scripts más eficientes y flexibles.






