Acessar a seleção do usuário de um cmdlet anterior

2

Estou escrevendo um script que desejo reagir, dependendo da resposta do usuário a um prompt de confirmação que faz parte de um cmdlet sendo executado no script. Por exemplo:

Stop-Process -Name notepad -Confirm
if ($userresposne -eq "Yes") {echo "R.I.P. Notepad"} else {echo "Notepad lives to fight another day"}

Eu preciso saber o que devo usar no lugar de $userresponse para acessar a entrada do usuário no prompt de confirmação em Stop-Process . (Assim que isso for conhecido, tenho certeza de que posso descobrir o que deve ser usado apropriadamente no lugar de "Yes" .) Existe uma maneira de fazer isso?

Estou trabalhando no PowerShell 3.0, mas preciso que o script seja compatível com versões 2.0.

A chave aqui é que eu não quero ter que escrever meu próprio mecanismo de solicitação no script. Estou ciente de que existem maneiras de fazer isso e fiz isso em outros scripts. No entanto, como Stop-Process já é capaz de solicitar ao usuário a entrada de que preciso, adicionar essas linhas extras aqui pareceria um pouco redundante.

Em scripts em lote, provavelmente estaria procurando algo como a variável de ambiente %ERRORLEVEL% . Existe algo semelhante que eu poderia usar aqui?

    
por Iszi 04.09.2013 / 18:11

2 respostas

2

O cmdlet stop-process suporta um switch -passthru que pode ser útil nesta circunstância

para que você possa atribuir

$processresult = Stop-Process -Name notepad -Confirm -Passthru

if ($processresult.name -eq "notepad") {echo "R.I.P. Notepad"} else {echo "Notepad lives"}

se o usuário optar por interromper o processo (ou seja, digitar Y), então $ processresult será um objeto Process. Se o usuário optar por não finalizar o processo (ou seja, inserir n), não será. então teste o objeto resultante e baseie-o nisso.

Um pouco hacky, mas deve funcionar.

    
por 04.09.2013 / 19:15
1

Escrever um pouco mais de código para manipulação de entrada não é tão grande coisa. Por exemplo,

$input = Read-Host "Would you like to kill notepad?"

if($input.ToLower() -eq "yes") {
    Stop-Process -Name notepad
    Write-Host "R.I.P. Notepad"
} else {
    Write-Host "Notepad lives to fight another day"
}

Funcionaria muito bem e não adicionaria uma tonelada ao seu script.

    
por 04.09.2013 / 19:16