Como Definir um Valor Padrão com Read-Host no PowerShell

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

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:

ler condição do host 1

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:

ler host condicional 2

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:

ler host condicional 3

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 $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çã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:

ler host - função

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 do 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ção if-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:

ler host - fazer enquanto

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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
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