我正在编写一个脚本,希望能够根据用户对确认提示的回答做出反应,该确认提示是脚本中运行的 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"
}
可以很好地工作并且不会给你的脚本添加太多内容。