用於驗證 DOMAIN\使用者名稱的 PowerShell 正規表示式

用於驗證 DOMAIN\使用者名稱的 PowerShell 正規表示式

我有以下正規表示式用於在 PowerShell 腳本中驗證 Windows 使用者名稱。

$fqusername -imatch '^\w+[\\]\w+$'

這在我自己的環境中運作良好,但我計劃將其發布以供更廣泛的使用,並希望確保它對其他人正確驗證。

答案1

嗯,不完全是。你會錯過一些東西。

域部分:

\w+匹配單字字元。這是可以的,直到該人不使用 NETBIOS 名稱而是使用域名(完全支援)以便匹配STACKOVERFLOW\Zypher...但不是STACKOVERFLOW.COM\Zypher因為.會放棄匹配。

用戶部分:

而Goyuix已經說明了哪些字元是不允許的。這暗示著所有其他字符都是允許的。一個非常常見的例子就是-角色。因此僅使用破折號作為範例STACKOVERFLOW\Zypher-SO是不匹配的。

這也是<user>@<domain>用戶帳戶的有效表示法。

您想實現什麼目標,可能有比正規表示式更好的方法。

答案2

儘管有一些事情需要注意,但您可能會對此感到滿意:

首先,根據TechNet 文章中,以下是使用者名稱中不允許使用的字元的清單。這是在 PowerShell 中的:

'( ; : " <> * + = \\ | ? , )' -imatch '\w'

它返回 false,所以你\w應該沒問題。

其次,作為一項可能的改進,您可以考慮將 括\w在括號中,以啟用分組並輕鬆提取匹配的網域或使用者名稱部分。注意:它會(非常輕微地)減慢匹配速度並使用(非常輕微地)更多記憶體。

三、根據MS KB文章938447使用者名稱/物件中的某些字元被視為相同。快速測試顯示PowerShell 正確匹配了所提到的帶有元音變音的字元與您的正規表示式相匹配,因此,如果您使用它來建立帳戶,則在奇怪的情況下該帳戶可能仍會失敗,請務必小心。

相關內容