Назад | Перейти на главную страницу

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

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

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

Это прекрасно работает в моей среде, но я планирую выпустить его для более широкого использования и хочу убедиться, что он правильно проверяется для других.

Не совсем так. Вы собираетесь что-то упустить.

Часть домена:

\w+ совпадает с символами слова. и это нормально, пока человек не использует имя NETBIOS, но использует имя домена (полностью поддерживается), чтобы оно соответствовало STACKOVERFLOW\Zypher ... но нет STACKOVERFLOW.COM\Zypher поскольку . скинет совпадение.

Пользовательская часть:

в то время как Goyuix заявил, какие символы не разрешены. Это подразумевает, что ВСЕ ДРУГИЕ символы РАЗРЕШЕНЫ. Очень распространенный пример этого - - персонажи. Итак, просто используя тире в качестве примера STACKOVERFLOW\Zypher-SO не совпадет.

Также <user>@<domain> также является допустимым обозначением для учетной записи пользователя.

Что вы пытаетесь выполнить, может быть лучший способ, чем регулярное выражение.

Скорее всего, вам это понравится, хотя есть несколько вещей, о которых следует знать:

Во-первых, согласно этот В статье TechNet ниже приводится список символов, которые нельзя использовать в имени пользователя. Вот это в PowerShell:

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

Он возвращает false, поэтому ваш \w все должно быть в порядке.

Во-вторых, в качестве возможного улучшения вы можете рассмотреть возможность упаковки \w в скобках, чтобы включить группировку и легкое извлечение домена или имени пользователя из совпадения. Примечание: это (очень немного) замедлит сопоставление и использует (очень немного) больше памяти.

В-третьих, согласно статье MS KB 938447 определенные символы рассматриваются как равные в именах пользователей / объектах. Быстрый тест показывает, что PowerShell правильно соответствует тому, что упомянутые символы с умлаутом совпадают с вашим регулярным выражением, поэтому будьте осторожны, если вы используете его для создания учетных записей, учетная запись может по-прежнему терпеть неудачу в странных случаях.