这是我的第一个剧本,所以不要打败我!
我正在编写一个创建网络目录的脚本。 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 ')
答案 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 ')
}