2

Я пишу сценарий, который я хочу иметь возможность реагировать в зависимости от ответа пользователя на запрос подтверждения, который является частью командлета, выполняемого в сценарии. Например:

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

Мне нужно знать, что я должен использовать вместо $userresponse для вызова ввода пользователя в запрос подтверждения в Stop-Process . (Как только это станет известно, я уверен, что смогу выяснить, что следует правильно использовать вместо "Yes" .) Есть ли способ сделать это?

Я работаю в PowerShell 3.0, но мне нужно, чтобы скрипт был обратно совместим с 2.0.

Ключевым моментом здесь является то, что я не хочу писать свой собственный механизм подсказок в сценарий. Я знаю, что есть способы сделать это, и я сделал это в других сценариях. Однако, поскольку Stop-Process уже способен запрашивать у пользователя ввод, который мне нужен, добавление этих дополнительных строк здесь может показаться излишним.

В пакетных сценариях я бы, вероятно, искал что-то вроде переменной среды %ERRORLEVEL% . Есть ли что-то подобное, что я мог бы использовать здесь?

2 ответа2

2

Командлет stop-process поддерживает ключ -passthru, который может быть полезен в этом случае.

чтобы вы могли назначить

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

if ($ processresult.name -eq "notepad") {echo "RIP Notepad"} else {echo "Блокнот живет"}

если пользователь решит остановить процесс (т.е. введет Y), то $ processresult будет объектом Process. Если пользователь решит не завершать процесс (то есть введет n), он не будет. так что протестируйте полученный объект и основывайте его на этом.

Немного хакерский, но должен работать.

1

Написание дополнительного кода для обработки ввода не так уж сложно. Например,

$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"
}

Будет работать просто отлично и не добавит тонны к вашему сценарию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .