Я использую 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, и это работает. Но я не могу не думать, что есть проблема синтаксиса, препятствующая очевидному подходу. Исследования, направленные на ее устранение, оказались безрезультатными.
Ответ 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"), чтобы его заполнить.