ValidateLength Powershell

时间:2016-10-04 14:06:02

标签: powershell

这是我的第一个剧本,所以不要打败我!

我正在编写一个创建网络目录的脚本。 AD组基于用户输入。以下是我到目前为止所得到的内容。它有效,但我想做一些改进。

我想验证用户输入的长度。我找到了一篇文章(PowerShell ValidateLength with Read-Host),解释了如何使用ValidateLength字符串来检查用户的输入。这很好用,但是,我希望将它包含在循环中。如果用户没有输入正好X个字符的示例 - 然后重试。现在它只是出错了。

非常感谢任何帮助!

[ValidateLength(2,2)]$Division = [string](Read-Host -Prompt 'Please enter the TWO digit division number ')
[ValidateLength(4,4)]$Matter = [string](Read-Host -Prompt 'Please enter the FOUR digit matter number ')
[ValidateLength(4,4)]$Client = [string](Read-Host -Prompt 'Please enter the FOUR digit client number ')

3 个答案:

答案 0 :(得分:3)

虽然各种[Validate ...属性适用于变量,但它是非标准用法(很少有人知道它们)。当想要出错时,它最有效。

如果你不这样做,那就自己检查一下,如果它不是你想要的,那就决定做什么:

do {
    $Division = [string](Read-Host -Prompt 'Please enter the TWO digit division number ')
    if ($Divison.Length -ne 2) {
        continue
    }

    $Matter = [string](Read-Host -Prompt 'Please enter the FOUR digit matter number ')
    if ($Matter.Length -ne 4) {
        continue
    }

    $Client = [string](Read-Host -Prompt 'Please enter the FOUR digit client number ')
    if ($Client.Length -ne 4) {
        continue
    }

    break
} while ($true)

答案 1 :(得分:3)

正如@briantist已经指出的那样,验证函数是为了不同的目的而进行的(参数验证)。您有不同的方案,因为您希望在输入有效值之前一直提示用户。由于多种原因,验证功能在这种情况下效果不佳:

  • 他们抛出错误而不是返回一个布尔值,这对函数调用来说很好,但不能用于验证值。
  • 他们不重复,所以无论如何你还需要额外的代码,
  • 他们的参数不能是变量。

我可能会将输入/验证循环放在函数中并使用数字比较而不是检查字符串的长度,因为您还要求用户输入数字。

$("form.offer_post").submit(function(e) {
    var name = $('#project_info').val().trim(),
        price = $.trim($('#offer_price').val().trim());

    if (price.length<1) { 
        if(!$.isNumeric($('#offer_price').val())) {
            alert("Offer MUST be numeric!"); 
            e.preventDefault();
            return false;
        }
        alert("Please enter the project price"); 
        e.preventDefault();
        return false;
    }

    if (name.length<1) { 
        alert("Please enter some description for your offer"); 
        e.preventDefault();
        return false;
    }


});

答案 2 :(得分:0)

您可以使用while循环:

$Division = $null
while ($null -eq $Division) {
    [ValidateLength(2,2)]$Division = [string](Read-Host -Prompt 'Please enter the TWO digit division number ')
}