Como Definir um Valor Padrão com Read-Host no PowerShell
-
Visão geral do comando
Read-Host
no PowerShell -
Use uma Declaração Condicional para Definir um Valor Padrão Com o Comando
Read-Host
no PowerShell -
Use uma Função para Definir um Valor Padrão Com o Comando
Read-Host
no PowerShell -
Use um Loop Do-While para Definir um Valor Padrão Com o Comando
Read-Host
no PowerShell - Conclusão

PowerShell é uma linguagem de script poderosa que fornece várias maneiras de interagir com os usuários. Um método comum é usar Read-Host
para solicitar a entrada dos usuários.
No entanto, existem cenários em que fornecer um valor padrão é benéfico. Neste guia, exploraremos diferentes métodos para incorporar valores padrão com Read-Host
no PowerShell.
Visão geral do comando Read-Host
no PowerShell
Read-Host
é um cmdlet fundamental no PowerShell que permite que scripts interajam com os usuários, solicitando a entrada deles. É uma ferramenta versátil para coletar informações durante a execução do script. Este cmdlet é particularmente útil em cenários onde informações dinâmicas ou específicas do usuário são necessárias.
Sintaxe:
Read-Host [-Prompt] <String> [-AsSecureString] [-Credential <PSCredential>] [-ErrorAction <ActionPreference>] [-Timeout <Int32>] [-OutVariable <String>] [-OutBuffer <Int32>] [-InputObject <PSObject>] [<CommonParameters>]
Aqui, os parâmetros principais incluem:
-Prompt
: Especifica a mensagem que será exibida ao usuário.-AsSecureString
: Solicita a entrada como uma string segura (senha).-Credential
: Solicita um nome de usuário e uma senha. Retorna um objetoPSCredential
.-ErrorAction
: Define a ação a ser tomada se um erro ocorrer.-Timeout
: Define um limite de tempo para quanto tempo o cmdlet aguardará a entrada.-OutVariable
: Armazena o resultado em uma variável.-OutBuffer
: Determina o número de objetos a serem armazenados em buffer antes da saída.-InputObject
: Permite a entrada do pipeline.
Uso básico do comando Read-Host
$userInput = Read-Host "Please enter your name"
Neste exemplo, o usuário será solicitado com a mensagem "Por favor, insira seu nome"
. O valor que ele inserir será armazenado na variável $userInput
.
Entrada de String Segura
$securePassword = Read-Host "Please enter your password" -AsSecureString
Este comando solicita ao usuário uma senha, e a entrada é armazenada como uma string segura na variável $securePassword
.
Funcionalidade de Timeout
$userInput = Read-Host "Please enter your choice" -Timeout 10
Este comando solicita ao usuário uma entrada e aguardará no máximo 10
segundos. Se nenhuma entrada for fornecida dentro desse tempo, a variável $userInput
ficará vazia.
Você pode incorporar valores padrão usando declarações condicionais, funções, loops ou blocos try-catch em combinação com Read-Host
.
Use uma Declaração Condicional para Definir um Valor Padrão Com o Comando Read-Host
no PowerShell
Crie uma variável chamada defaultName
e dê a ela o valor da string John Doe
. Este valor será usado no lugar da entrada do usuário, se ele optar por não fornecer uma.
$defaultName = "John Doe"
Defina uma nova variável, userName
, que irá produzir uma mensagem pedindo ao usuário para inserir um valor e utilizará o comando Read-Host
para realizar essa ação.
$userName = Read-Host ("Please enter your name (default is {0})" -f $defaultName)
O código abaixo implementa uma condição que verifica se o usuário forneceu alguma entrada. Ele verifica se a variável $userName
é nula ou uma string vazia.
Se o usuário fornecer alguma entrada (não uma string vazia), ele atualiza o valor de $defaultName
para a entrada do usuário.
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)!"
Saída:
Na próxima abordagem, relocamos o processo de receber a entrada do usuário dentro da condição que verifica se o usuário inseriu algum valor ou não. Isso nos permite rastrear melhor se o usuário forneceu ou não dados.
Sem qualquer ação do usuário, usamos o valor padrão, John Doe
. Se o usuário oferecer uma entrada, no entanto, usamos o valor salvo na variável userName
.
Código:
$defaultName = "John Doe"
if (($userName = Read-Host "Press enter to accept default value $defaultName") -eq '') { $defaultName } else { $userName }
Saída:
A última abordagem verifica se a entrada é dada pelo usuário e, se for, então atribui o valor da entrada do usuário diretamente à variável chamada defaultName.
Código:
$defaultName = "John Doe"
if ($userName = Read-Host "Value [$defaultName]") { $defaultName = $userName }
Saída:
Dessa forma, não é necessário usar a condição else
.
Use uma Função para Definir um Valor Padrão Com o Comando Read-Host
no PowerShell
Uma função encapsula um conjunto de instruções que podem ser reutilizadas em scripts. Vamos criar uma função chamada Read-HostWithDefault
que incorpora valores padrão.
function Read-HostWithDefault {
param (
[string]$prompt,
[string]$default
)
$userInput = Read-Host "$prompt (default is $default)"
$userInput = if ($userInput -ne "") { $userInput } else { $default }
return $userInput
}
Explicação:
function Read-HostWithDefault { ... }
: Isso define a função chamadaRead-HostWithDefault
.param ( [string]$prompt, [string]$default )
: Isso especifica os parâmetros que a função espera. Neste caso, é uma mensagem de prompt e um valor padrão.$userInput = Read-Host "$prompt (o padrão é $default)"
: Esta linha solicita a entrada do usuário, exibindo tanto o prompt quanto o valor padrão. A entrada é armazenada na variável$userInput
.$userInput = if ($userInput -ne "") { $userInput } else { $default }
: Esta linha verifica se$userInput
não é uma string vazia ($userInput -ne ""
). Se essa condição for verdadeira (significa que o usuário forneceu entrada),$userInput
mantém seu valor. Se falsa (significa que o usuário não forneceu entrada),$default
é atribuído a$userInput
.return $userInput
: Finalmente, a função retorna o valor resultante.
Agora, vamos ver como usar essa função em um cenário prático:
$defaultName = "John Doe"
$name = Read-HostWithDefault -prompt "Enter your name" -default $defaultName
Write-Host "Hello, $name!"
Explicação:
$defaultName = "John Doe"
: Aqui, definimos um valor padrão para o nome do usuário.$name = Read-HostWithDefault -prompt "Digite seu nome" -default $defaultName
: Esta linha solicita ao usuário o nome dele, exibindo a mensagem de prompt fornecida e o valor padrão. A funçãoRead-HostWithDefault
é chamada com os parâmetros apropriados.Write-Host "Olá, $name!"
: Isso gera uma saudação que é fornecida pelo usuário ou um valor padrão.
Saída:
Use um Loop Do-While para Definir um Valor Padrão Com o Comando Read-Host
no PowerShell
O loop do-while
é uma estrutura de controle no PowerShell que executa repetidamente um bloco de código enquanto uma condição específica for verdadeira. Isso é particularmente útil quando você deseja garantir que uma certa ação seja realizada pelo menos uma vez.
A sintaxe básica de um loop do-while
é:
do {
# Code to be executed
} while (condition)
O bloco de código dentro da instrução do
continuará a executar enquanto a condição especificada após a palavra while
for verdadeira.
Vamos considerar um exemplo onde queremos solicitar ao usuário seu nome, mas fornecer um valor padrão de "John Doe"
se ele não inserir 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!"
Explicação:
$defaultName = "John Doe"
: Esta linha define o valor padrão que queremos usar se o usuário não fornecer nenhuma entrada.do { ... } while (-not $userName)
: Isso inicia um loopdo-while
. O bloco de código dentro da instruçãodo
será executado pelo menos uma vez. A condição(-not $userName)
garante que o loop continue enquanto$userName
não for fornecido.$userName = Read-Host "Por favor, insira seu nome (o padrão é $defaultName)"
: Isso solicita ao usuário seu nome, exibindo o valor padrão na mensagem.$userName = if ($userName) { $userName } else { $defaultName }
: Esta linha usa uma instruçãoif-else
para determinar o valor de$userName
. Se$userName
tiver um valor (ou seja, não está vazio ou nulo), ele mantém esse valor. Caso contrário, atribui o nome padrão$defaultName
.-not $userName
: Essa condição verifica se$userName
está vazio ou não foi fornecido. Se estiver vazio, o loop continuará, solicitando ao usuário novamente.- Uma vez que o usuário forneça entrada, a condição
-not $userName
se torna falsa e o loop termina.
Saída:
Conclusão
Neste guia abrangente, exploramos vários métodos para definir valores padrão com o comando Read-Host
no PowerShell. Cada abordagem oferece vantagens distintas, dependendo dos requisitos específicos do seu script.
- Declarações Condicionais: Este método permite uma verificação simples para a entrada do usuário e oferece flexibilidade no tratamento de diferentes cenários.
- Funções: Ao encapsular a lógica em uma função, você pode criar um código reutilizável que incorpora valores padrão de forma contínua.
- Loops Do-While: Essa abordagem garante que uma certa ação seja realizada pelo menos uma vez, tornando-a adequada para cenários onde a entrada do usuário é crucial.
Ao entender e aplicar essas técnicas, você pode melhorar a experiência do usuário e a resistência dos seus scripts PowerShell. Lembre-se de escolher o método que melhor se alinha aos requisitos específicos do seu script.
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