Powershell parece armazenar várias pressões da tecla enter

1

Eu estava trabalhando em um script do PowerShell para adicionar usuários ao Active Directory de um arquivo csv gerando nomes de usuário de seus nomes e sobrenomes. Depois de criar um nome de usuário inicial (primeiro nome inicial e sobrenome), ele verifica se esse nome de usuário já existe. Em caso afirmativo, pede confirmação para tentar primeiro inicial + inicial do meio + sobrenome. Atualmente, faço isso com o seguinte código:

write-host "Default username is already taken. Please press enter tocontinue or type NO to skip importing this user.
$PROMPT = Read-Host '>'
$PROMPT = $PROMPT.ToLower()

#If not skipped, continue with logic
if ($PROMPT -ne "no")
{
    ...
}

Isso parece funcionar, mas se eu pressionar acidentalmente enter duas vezes, por exemplo, ele não apenas confirma o prompt atual como também o próximo. Eu sou muito novo no PowerShell, então estou supondo que há uma maneira melhor de fazer isso. Algum conselho?

    
por Krixvar 12.08.2015 / 23:40

2 respostas

3

Vocêpodeexibiralgumtipodecaixademensagem.Existemalgumasmaneirasdiferentesdefazerisso.Aquiestáumamaneirafácil:

$wshell=New-Object-ComObjectWscript.Shell$msg="Default username is already taken. Continue?"
$r = $wshell.Popup($msg, 0, "Warning", 4)
if ($r -eq 6)
{
    # Continue ...
}

Para obter uma explicação dos números misteriosos 4 e 6, consulte Método Popup .

    
por 13.08.2015 / 09:19
1

Você pode alterar seu script de forma que a entrada seja y / yes ou n / no. Se não for nenhum desses, solicite novamente.

Isso eliminaria a confirmação acidental de uma alteração, mas exigiria que você pressionasse especificamente uma tecla e depois inserisse para confirmar ou pular.

Possivelmente melhores maneiras de fazer isso, mas esse é o meu pensamento inicial.

Como um aparte, você pode pular a linha $PROMPT = $PROMPT.ToLower() . -eq não faz distinção entre maiúsculas e minúsculas, por isso os seguintes trabalhos:

PS C:\> 'NO' -eq 'no'
True

Se você quiser que a comparação de string seja sensível a maiúsculas e minúsculas, procure os operadores que iniciam com um c, como -ceq .

    
por 13.08.2015 / 01:31

Tags