循环,直到收到正确的验证输入 Powershell

Looping through till you receive correct validation input Powershell

提问人:movement 提问时间:3/31/2023 更新时间:3/31/2023 访问量:27

问:

我希望代码继续循环,直到它收到正确的验证输入。如果用户输入 yes,则脚本可以继续执行。如果用户输入 no,它将要求用户检查上一个脚本的输出。如果用户输入了“否”以外的任何内容,我希望程序让用户知道它必须是“是”或“否”的答案,但也要循环回并提出问题。我的代码中缺少什么来允许这样做?

$user_input = Read-Host "Does id look correct? [yes/no]"

if ($user_input -eq 'yes'){
    Write-Host "Running Pre- script..."

    $SQLServer3 = "ServerB" 
    $Database3 = 'master'


    Invoke-Sqlcmd -ServerInstance $SQLServer3 -Database $Database3 -InputFile "C:\Users\Documents\Scripts\Restore.txt"
} 

    elseif ($user_input -eq 'no') {
     Write-Host "Check id"

    }
   else {

    Write-Host "Answer must be 'yes' or 'no'"

}
PowerShell 循环 用户输入 sqlcmd

评论

1赞 Santiago Squarzon 3/31/2023
这在 PSHost 中使用要容易得多。PromptForChoice(..)
1赞 movement 3/31/2023
@SantiagoSquarzon谢谢,我用过它,效果很好

答:

0赞 Santiago Squarzon 3/31/2023 #1

使用 PrompForChoice,您的脚本可以如下所示,因为它已确保必须选择其中一个选项

if($Host.UI.PromptForChoice($null, 'Does id look correct?', ('&Yes', '&No'), 0) -eq 0) {
    Write-Host 'Running Pre- script...'

    $invokeSqlcmdSplat = @{
        ServerInstance = 'ServerB'
        Database       = 'master'
        InputFile      = 'C:\Users\Documents\Scripts\Restore.txt'
    }
    Invoke-Sqlcmd @invokeSqlcmdSplat
}
else {
    Write-Host 'Check id'
}