Оптимальный способ поиска пользователя в AD (Get-ADUser) на основе другого ввода - PullRequest
0 голосов
/ 19 декабря 2018

Я ищу ваши мысли об оптимальном способе сделать это.

Цель состоит в том, чтобы просто найти данного пользователя на основе различных возможных входных данных.

Возможны следующие варианты:

$input = "John,Smith"
$input = "John Smith"
$input = "John Smith(ext)"
$input = "Smith,John"
$input = "Smith John"
$input = "Smith John(ext)"

Мое рабочее решение:

if ($input -like "*(*" ) {
$input = $input -replace '\([^\)]+\)'
}

if ($input -like "*,*"){
$FullName = $input -split "," 
} 
elseif ($input -like "* *"){
$FullName = $input -split " "
} 


get-ADUser -Filter " ( ( (GivenName -like '$($FullName[0])*') -and (SurName -like '$($FullName[1])*') ) -or ( (SurName -like '$($FullName[0])*') -and (GivenName -like '$($FullName[1])*') ) ) "

Итак, в основном происходит:

-Если входные данные содержат круглые скобки, удалите их и то, что находится между ними.
-Если вход содержит запятую, разделите строку на этом.
-Если вход содержит пробел, разделите строку на этом.
-Get-AdUser, фильтрация (GivenName и Surname) ИЛИ(Фамилия и Имя)
, поскольку я не знаю, в каком порядке они будут.

Работает нормально, как есть, но мне всегда любопытно найти оптимальный путь.

У вас есть что предложить в этом сценарии?Большое спасибо за ваш вклад.

1 Ответ

0 голосов
/ 19 декабря 2018

Используйте -LDAPFilter и разрешение неоднозначных имен (anr):

Get-ADUser -LDAPFilter "(anr=John Doe)"
Get-ADUser -LDAPFilter "(anr=Doe John)"

Просто замените запятую пробелом и удалите "(ext)".Имя переменной $input зарезервировано, поэтому его не следует использовать:

$name = $name -replace ",", " "
$name = $name -replace "\(ext\)", ""

Или оператор -replace в цепочке:

$name = $name -replace ",", " " -replace "\(ext\)", ""

Поиск будет:

Get-ADUser -LDAPFilter "(anr=$name)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...