PowerShell Regex для проверки DOMAIN\username

PowerShell Regex для проверки DOMAIN\username

У меня есть следующее регулярное выражение для проверки имен пользователей Windows в скрипте PowerShell.

$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 KB938447Некоторые символы рассматриваются как равные в именах пользователей/объектах. Быстрый тест показывает, что PowerShell правильно сопоставляет, что упомянутые символы с умлаутом соответствуют вашему регулярному выражению, поэтому будьте осторожны, если вы используете его для создания учетных записей, так как учетная запись может по-прежнему давать сбой в странных случаях.

Связанный контент