powershell 是否有办法暂时返回到命令提示符

disho6za  于 2023-03-08  发布在  Shell
关注(0)|答案(2)|浏览(130)

如何允许用户“暂停当前管道并返回到命令提示符”,然后在powershell脚本中继续?
我在一篇关于Powershell中用户交互的blog post文章中偶然发现了这一行

$suspend = New-Object System.Management.Automation.Host.ChoiceDescription "&Suspend", "Pause the current pipeline and return to the command prompt. Type ""exit"" to resume the pipeline."

这是一个提示符中的mock选项,模仿了本机命令(Remove-Item)的外观。那个命令实际上实现了那个行为。做了一个快速的谷歌搜索,我没有在脚本中找到一个实现。

ffscu2ro

ffscu2ro1#

可以使用$Host.EnterNestedPrompt()暂停当前操作以进入“嵌套”提示符-退出后将恢复执行(使用exit$Host.ExitNestedPrompt()):

function f {
  param([switch]$Intervene)

  $abc = 123

  if($Intervene.IsPresent){
    $host.EnterNestedPrompt()
  }

  Write-Host "`$abc has value '$abc'"
}

现在尝试使用和不使用-Intervene开关调用函数:

zmeyuzjn

zmeyuzjn2#

Mathias R. Jessen's helpful answer无疑是适合您使用情形的最佳解决方案。
因为存在功能重叠,所以让我提供一个脚本或函数的按需 * 调试 * 解决方案,使用Wait-Debugger cmdlet,它还在当前范围内输入嵌套提示符,同时提供附加的调试特定功能来单步调试代码。

function foo {
  'Entering foo.'
  if (0 -eq $host.ui.PromptForChoice('Debugging', 'Enter the debugger?', ('&Yes', '&No'), 1)) {
    Wait-Debugger
  }
  'Exiting foo.'
}

执行foo会显示yes/no提示,提示是否应进入调试器。
可以使用exit或简单地使用c(特定于调试的命令之一;h显示它们全部)。

相关问题