从上一个 cmdlet 访问用户的选择

从上一个 cmdlet 访问用户的选择

我正在编写一个脚本,希望能够根据用户对确认提示的回答做出反应,该确认提示是脚本中运行的 cmdlet 的一部分。例如:

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%环境变量的东西。有没有类似的东西可以在这里使用?

答案1

stop-process cmdlet 支持 -passthru 开关,这在这种情况下可能会有用

所以你可以分配

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

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

如果用户选择停止进程(即输入 Y),则 $processresult 将是一个 Process 对象。如果用户选择不结束进程(即输入 n),则不会结束。因此,测试结果对象并以此为基础。

有点奇怪但应该可以工作。

答案2

为输入处理编写额外的代码并不是什么大问题。例如,

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

可以很好地工作并且不会给你的脚本添加太多内容。

相关内容