使用nonewline

时间:2016-11-17 19:24:25

标签: validation loops powershell while-loop

我有一个在我的Powershell脚本中调用时插入Y或N菜单的函数。它使用while循环来验证是否输入了Y或N值。一切正常,但每次发生错误时都会创建一个新行。我可以使用cls并重新显示所有内容,但这不是最理想的解决方案。相反,我想找到一种方法在同一行重新显示读取主机提示,同时清除以前输入的任何答案。这是我现有的代码:

# Begin function to display yes or no menu
function ynmenu {
    $global:ans = $null
    Write-Host -ForegroundColor Cyan "`n Y. [Yes]"
    Write-Host -ForegroundColor Cyan "N. [No]`n"
    While ($ans -ne "y" -and $ans -ne "n"){
        $global:ans = Read-Host "Please select Y or N"
    }
}
# End function ynmenu

我还有一些其他动态填充的菜单,可以利用这种方法。找到解决方案也可以解决这个问题。

1 个答案:

答案 0 :(得分:1)

我认为没有任何简单的方法可以做到这一点。

但是对于是/否响应,只要您所在的范围(函数,脚本等)定义了属性$PSCmdlet.ShouldContinue($Query, $Caption),您就可以使用[CmdletBinding(SupportsShouldProcess=$true)]。这在ISE和控制台主机中显示了适当的是/否提示,并避免了手动处理。