powershell 动力 shell :验证失败时再次提示用户输入

uoifb46i  于 2023-01-02  发布在  Shell
关注(0)|答案(2)|浏览(166)

我有一个需要用户大量输入的脚本。我需要验证这些输入。我目前面临的问题是,如果其中一个输入未通过验证,则应提示用户仅重新输入该特定输入,其余所有有效输入应保持原样
样本代码:

Function Validate 
{ 
Param( 
[Parameter(Mandatory=$true)] 
[ValidateNotNullOrEmpty()] 
[ValidateLength(3,5)] 
[String[]]$Value 
) 
} 
$Value = Read-Host "Please enter a value" 
Validate $Value 
Write-Host $value 
$Test = Read-Host "Enter Another value" 
Write-Host $Test

在这里,当$Value验证失败时,它会抛出异常,并移动以获取第二个输入。

3xiyfsfu

3xiyfsfu1#

可以使用ValidateScript将其直接添加到参数中

Function Validate 
{ 
Param( 
[Parameter(Mandatory=$true)] 
[ValidateScript({
while ((Read-Host "Please enter a value") -ne "SomeValue") {
Write-Host "Incorrect value... Try again"
Read-Host "Please enter a value"
}})]
[string]
$Value
) 
}
hgqdbh6s

hgqdbh6s2#

您可以使用PowerShell Try/Catch and Retry技术来执行以下操作:

function Get-ValidatedInput {
    function Validate { 
        Param( 
            [Parameter(Mandatory=$true)] 
            [ValidateNotNullOrEmpty()] 
            [ValidateLength(3,5)] 
            [String]$Value
        )
        $Value
    }
    $Value = $Null
    do {
        Try {
            $Value = Validate (Read-Host 'Please enter a value')
        }
        Catch {
            Write-Warning 'Incorrect value entered, please reenter a value'
        }
    } while ($Value -isnot [String])
    $Value
}
$Value = Get-ValidatedInput
$Test = Get-ValidatedInput

相关问题