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 が、ウムラウト付きの前述の文字が正規表現と正しく一致することが示されています。そのため、これを使用してアカウントを作成する場合は、予期しないケースでアカウントが失敗する可能性があるので注意してください。