Prompt do PowerShell para continuar a execução do código

7

Eu tenho um script que estou usando para automatizar os processos WSUS , e o último estágio dele continua a remover todos arquivos / objetos antigos / desnecessários.

Eu gostaria de solicitar "Pressione" Enter "para continuar com a remoção ou qualquer outra chave para parar" antes do estágio de limpeza para dar às pessoas a opção de não executá-lo.

O código que tenho atualmente no final do script está aqui:

Get-WsusServer 10.1.1.25 -PortNumber 8530 | Get-WsusUpdate -Classification All -Approval Unapproved -Status FailedOrNeeded | Approve-WsusUpdate -Action Install -Target $ComputerTarget -Verbose

Write-Host "Updates have been approved!"
Write-Host "Preparing to clean WSUS Server of obsolete computers, updates, and content files."

#Part2 - WSUS Server Cleanup

##Run Cleanup Command
Get-WsusServer $WSUS_Server -PortNumber $PortNumber | Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles

Pouco antes da # Parte 2, gostaria de ter o prompt 'Pressione Enter para continuar ou qualquer outra tecla para abortar'

Existe uma maneira simples de fazer isso?

Tudo o que vi parece envolver aninhar todo o script dentro de um bloco de código, o que eu prefiro não fazer. = /

    
por Abraxas 03.09.2015 / 18:49

6 respostas

4

Outra solução simples seria usar:

Read-Host -Prompt "Press any key to continue or CTRL+C to quit" 

Eu acredito que esta é uma solução melhor para a resposta atualmente aceita, porque o requisito de entrar no teclado. Eu não acredito que bater entrar vai aceitar o prompt da interface do usuário, a menos que o elemento da interface do usuário está em foco.

    
por 04.05.2017 / 18:28
4

Basta adicionar -confirme ao seu comando Invoke-WsusServerCleanup. Está embutido.

    
por 03.09.2015 / 21:03
3

Consulte Pausa de um script até o usuário pressionar uma tecla

As linhas de script relevantes são:

Write-Host "Press enter to continue and CTRL-C to exit ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Você pode adicionar um cheque para inserir e agrupar esse é um loop se realmente quiser que apenas uma chave continue. Você também pode adicionar outro para sair do script, mas eu recomendo apenas lembrar ao usuário que ctrl-c irá sair. Por que codificar para algo que está embutido?

    
por 03.09.2015 / 18:59
1

Você pode inserir um cmdlet Read-Host e processar o valor de entrada da maneira que quiser.

$userInput = Read-Host 
    
por 03.09.2015 / 18:59
1

Em qualquer etapa que você quiser que o PowerShell mantenha, escreva Pause em seu código. O PowerShell ficará em "Press Enter para continuar ...:" até você pressionar Enter ou fechar o shell / ISE .

    
por 03.09.2015 / 21:59
1

Criando esta resposta apenas como um complemento de acompanhamento baseado no comentário dos OPs sobre como validar a entrada, como uma adição às outras boas respostas. Era muito longo para colocar em um comentário no lugar certo.

A validação da entrada pode ser feita de várias maneiras. Por meio de preferência pessoal, gosto de usar a declaração change para inserir validação, como eu geralmente acho mais fácil de ler e depurar do que um monte de se mais se mais versátil do que um enquanto .

Da mesma forma, prefiro usar funções em loops para falhar na validação, pois acho o código mais limpo e mais reutilizável. As funções também têm a possibilidade integrada de validação de parâmetros onde essa parece ser a melhor maneira de validar o conteúdo de uma variável.

Então, apenas como exemplo, aqui está uma função simples que se chama para reafirmar a questão quando a entrada não é a esperada.

function Get-SomeInput {
    $input = read-host "Please write yes or no and press Enter"

    switch ($input) '
    {
        'yes' {
            write-host 'You wrote yes'
        }

        'no' {
            write-host 'You wrote no'
        }

        default {
            write-host 'You may only answer yes or no, please try again.'
            Get-SomeInput
        }
    }
}

Get-SomeInput
    
por 03.09.2015 / 20:15