Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как отфильтровать AD с помощью конкатенированной переменной в Powershell

Автор вопроса: uSlackrОтветов: 2

Я использую PowerShell v2 и модуль Microsoft AD для поиска в AD учетных записей, чей EmployeeID соответствует определенному идентификатору. Идентификатор обычно хранится в AD как "00000123456", но значение, которое я должен искать, - это только часть "123456". проблема в том, что я не могу понять, как сделать -подобный поиск в AD. вот мой текущий код

$EmpInfo = Import-csv "PSfile.csv"
$EmplID = EmpInfo.ID
$EmpAD = get-aduser -Filter {employeeId -like "*$EmplID"} -Properties * -EA Stop

На данный момент EmpAD всегда пуст

Я могу обойти это, изменив EmpID так, чтобы он содержал "*123456", прежде чем вызывать Get-ADUser, и это работает. Но я не могу не думать, что есть проблема синтаксиса, препятствующая очевидному подходу. Исследования, направленные на ее устранение, оказались безрезультатными.

active-directory

Ответы

Ответ 1 · рейтинг 1 · JPBlanc

Если ваша строка действительно находится в атрибуте employeeID, вы можете проверить:

$EmpAD = get-aduser -LDAPFilter "(employeeId=*$EmplID)" -SearchBase 'DC=dom,DC=fr' -Properties *

вы можете использовать LDP.EXE (или ADSI.EXE), чтобы проверить, что именно существует в вашем каталоге.

----- Отредактировано -----

Для меня это работает, если я тестирую с LDIF:

C:\temp>ldifde -f eid.ldf -d "dc=dom,dc=fr" -r "(employeeId=*)"
Connexion à " WM2008R2ENT.dom.fr " en cours
Connexion en tant qu'utilisateur actuel en utilisant SSPI
Exportation de l'annuaire dans le fichier eid.ldf
Recherche des entrées...
Création des entrées...
3 entrées exportées

Есть 3 объекта

В PowerShell с командлетами AD это дает следующее:

PS C:\>  get-aduser -LDAPFilter "(employeeID=*)" | Measure-Object

    Count    : 3

А также

    $var = "123456"
    PS C:\>  get-aduser -LDAPFilter "(employeeID=*$var)" -properties employeeID

    DistinguishedName : CN=user1 Users,OU=MonOu,DC=dom,DC=fr
    EmployeeID        : 00000123456
    Enabled           : True
    GivenName         : user1
    Name              : user1 Users
    ObjectClass       : user
    ObjectGUID        : b5e5ea59-93a6-4b24-9c3e-043a825c412e
    SamAccountName    : user1
    SID               : S-1-5-21-3115856885-816991240-3296679909-1107
    Surname           : Users
    UserPrincipalName : [email protected]

Будьте осторожны: я не понимаю, почему, но между модификацией в каталоге с MMC и результатом в приглашении PowerShell прошло некоторое время. Я перезагружаю новый интерпретатор PowerShell и повторно импортирую модуль AD.

Ответ 2 · Brian Desmond

С точки зрения производительности, если вы знаете, что идентификаторы всегда представляют собой определенное количество цифр (с ведущими нулями), вам будет НАМНОГО лучше просто отформатировать идентификатор заранее.

Если ваш идентификатор должен состоять из 11 цифр, сделайте что-то вроде этого $EmplID.ToString("D11"), чтобы его заполнить.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы