Como Definir um Valor Padrão com Read-Host no PowerShell
- 
          
            Visão geral do comando Read-Hostno PowerShell
- 
          
            Use uma Declaração Condicional para Definir um Valor Padrão Com o Comando Read-Hostno PowerShell
- 
          
            Use uma Função para Definir um Valor Padrão Com o Comando Read-Hostno PowerShell
- 
          
            Use um Loop Do-While para Definir um Valor Padrão Com o Comando Read-Hostno 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 objeto- PSCredential.
- -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 chamada- Read-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- $userInputnão é uma string vazia (- $userInput -ne ""). Se essa condição for verdadeira (significa que o usuário forneceu entrada),- $userInputmanté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ção- Read-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 loop- do-while. O bloco de código dentro da instrução- doserá executado pelo menos uma vez. A condição- (-not $userName)garante que o loop continue enquanto- $userNamenã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ção- if-elsepara determinar o valor de- $userName. Se- $userNametiver 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- $userNameestá 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 $userNamese 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