Validation Powershell验证输入

Validation Powershell验证输入,validation,powershell,match,limit,Validation,Powershell,Match,Limit,我正在尝试验证powershell中的一些输入。 用户应输入新广告用户的用户名。应验证此用户名是否包含任何无效字符(例如!、$、;,等等)。 有效字符为a-z(上下)、0-9、,-和 谢谢你的帮助 目前,我的代码如下所示: do{ $input="notok" # Eingabe es Usernamen Write-Host "Bite den Usernamen eingeben" $Username = Read-Host if ($Usern

我正在尝试验证powershell中的一些输入。 用户应输入新广告用户的用户名。应验证此用户名是否包含任何无效字符(例如!、$、;,等等)。 有效字符为a-z(上下)、0-9、,-和

谢谢你的帮助

目前,我的代码如下所示:

do{

    $input="notok"
    # Eingabe es Usernamen
    Write-Host "Bite den Usernamen eingeben"
    $Username = Read-Host


    if ($Username -notmatch "[a-zA-Z0-9_.-]") {
        Write-Host ""
        Write-Host "ACHTUNG: Benutzer $Username enthaelt ungueltige Zeichen (nur a-z, A-Z, 0-9, ., - und _ erlaubt), bitte die Eingabe wiederholen" -ForegroundColor Red
        Write-Host ""
        $input="notok"

    }else{

        $input="ok"

    }

}while($input -ne "ok")

您可以使用参数,并使用内置参数验证:

Param(
  [Parameter(Mandatory=$false,ValueFromPipeline=$true)] 
  [ValidateScript({$_-match "^[a-zA-Z0-9_\-,]+$"})] 
  [String]
  $Username
)
试试这个:

do{

    $input="notok"
    # Eingabe es Usernamen
    Write-Host "Bite den Usernamen eingeben"
    $Username = Read-Host


    if ($Username -notmatch "^[a-z0-9_.-]*$") {
        Write-Host ""
        Write-Host "ACHTUNG: Benutzer $Username enthaelt ungueltige Zeichen (nur a-z, A-Z, 0-9, ., - und _ erlaubt), bitte die Eingabe wiederholen" -ForegroundColor Red
        Write-Host ""
        $input="notok"

    }else{

        $input="ok"

    }

}while($input -ne "ok")

这是假设他正在使用一个我同意的函数,但是你的正则表达式只是检查是否包含这些字符,而不是所有字符都匹配表达式。你需要我发布的那一个。
[ValidateScript({$\u-match“^[a-z0-9.-]*$”})]
@Detaly Bagel-它不需要是一个函数,你也可以使用参数,因为它只是一个简单的脚本。ps1脚本哈,每天学习新的东西。不过,在脚本执行到一半时,您需要强制参数来提示您;需要注意的是,不幸的是,您无法控制输出的错误消息(据我所知),并且该消息对于最终用户来说可能过于技术化,因为原始脚本块是打印出来的。除此之外:在本例中,更简单的
ValidatePattern
属性就足够了:
[ValidatePattern('^[a-zA-Z0-9_.-]$)]
。没问题=)虽然如果使用函数,应该查看坎贝尔的答案,但这是一种更简洁的方法。当然,如果脚本完成了一半,你就必须坚持这样做。很好,但是请添加一个解释(你已经在@campbell.rw的回答中给出了一个解释)。Regex不是我真正喜欢的东西,但你只是问这些字符中是否有$Username。使用“^[a-z0-9.-]*$”代替(最明显的是“^前”和“*$后)是指所有字符必须匹配。事实上,这是正确的解释,我希望你能补充到你的答案中,因为没有多少人注意注释。目前,您的代码与OP之间的唯一区别是添加了
^
$
,这虽然至关重要,但目前还不明显。