2016-02-18 134 views
0

我想在PowerShell中验证一些输入。 用户应为新的AD用户输入用户名。该用户名应该针对任何无效字符(例如!,$,;等)进行验证。 有效字符是a-z(上和下),0-9,_, - 和,PowerShell验证输入

感谢您的任何帮助。

目前我的代码看起来是这样的:

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") 

回答

0

试试这个:

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") 
+0

谢谢,作品完美。 – JocSch

+1

没有可能=)虽然你应该检查出坎贝尔的答案,如果你正在使用一个函数,这是一个更好的方法。当然,如果在脚本的一半,你必须坚持这一点。 –

+0

不错,但请添加一个解释(你已经在@campbell.rw的回答中发表了评论)。 – mklement0

2

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

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

这是假设他正在使用我同意的函数,但是您的正则表达式仅检查是否包含任何这些字符,而不是所有字符匹配表达式。你需要我发布的那个。 –

+0

谢谢,这也会起作用。 – JocSch

+0

'[ValidateScript({$ _- match“^ [a-z0-9 _.-] * $”})]' –