Active Directory PowerShell – Расширенный фильтр (Часть 2)
В моем предыдущем посте я рассказывал о различных возможностях, доступных с помощью параметра –Filter, также известного как «расширенный фильтр». Этот пост дополняет предыдущий и рассказывает о различных операторах, которые поддерживаются расширенным фильтром и представляет некоторые примеры использования каждого из них. Большинство примеров взяты из нашей встроенной справки, которую вы можете вызвать командой:
PS C:\> get-help about_ActiveDirectory_Filter ## работает только в самых последних сборках
Вот список поддерживаемых операторов в расширенных фильтрах Active Directory Powershell:
Логический оператор |
Описание |
Эквивалентный оператор/выражение LDAP |
-eq |
Равно. Не поддерживает подстановочные знаки. |
= |
-ne |
Не равно. Не поддерживает подстановочные знаки. |
! x = y |
-like |
Аналогично –eq, но поддерживает сравнение с использованием подстановочных знаков. Единственный поддерживаемый подстановочный знак: * |
= |
-notlike |
Не соответствует. Поддерживает сравнение с использованием подстановочных знаков. |
! x = y |
-approx |
Приблизительно равно |
~= |
-le |
Лексикографически меньше или равно |
<= |
-lt |
Лексикографически меньше |
! x >= y |
-ge |
Лексикографически больше или равно |
>= |
-gt |
Лексикографически больше |
! x <= y |
-and |
И |
& |
-or |
ИЛИ |
| |
-not |
НЕ |
! |
-bor |
Побитовое ИЛИ |
:1.2.840.113556.1.4.804:= |
-band |
Побитовое И |
:1.2.840.113556.1.4.803:= |
-recursivematch |
Использует LDAP_MATCHING_RULE_IN_CHAIN (Win2k3 SP2 и выше) |
:1.2.840.113556.1.4.1941:= |
Пример 1: Получаем все записи Get-ADObject -Filter { ObjectClass -like "*" }
Эквивалентный LDAP фильтр: (objectClass=*)
Пример 2: Получаемзаписи , содержащие "bob" где - либов common name
Get-ADObject -Filter { CN -like "*bob*" }
Эквивалентный LDAP фильтр: (cn=*bob*)
Пример 3: Получаем записи, для которых количество ошибочных вводов пароля больше 5
Get-ADUser -Filter { badpwdcount -ge 5 }
Эквивалентный LDAP фильтр: (badpwdcount>=5)
Пример 4: Получаемвсехпользователейсатрибутом e -mail
Get-ADUser -filter { email -like "*" }
-или-
Get-ADObject -filter { email -like "*" -and ObjectClass -eq "user" }
Эквивалентный LDAP фильтр: (&(objectClass=user)(email=*))
Пример 5: Получаемвсезаписипользователейсатрибутом e-mail , гдефамилия = "smith"
Get-ADUser -Filter { Email -like "*" -and Surname -eq "smith" }
-или-
Get-ADUser -Filter { Email -like "*" -and sn -eq "smith" }
Эквивалентный LDAP фильтр: (&(sn=smith)(objectClass=user)(email=*))
Пример 6: Получаемвсезаписипользователей , гдеcommon name начинаетсяс "andy", атакжепользователей , укоторыхcommon name "steve" или "margaret"
Get-ADUser -Filter { CN -like "andy*" -or CN -eq "steve" -or CN -eq "margaret" }
-или-
Get-ADObject -Filter { objectClass -eq "user" -and (CN -like "andy*" -or CN -eq "steve" -or CN -eq "margaret") }
Эквивалентный LDAP фильтр: (&(objectClass=user) | (cn=andy*)(cn=steve)(cn=margaret))
Пример 7: Получаемвсезаписибезатрибута e-mail
Get-ADUser -Filter { -not Email -like "*" }
-или-
Get-ADUser -Filter { Email -notlike "*" }
Эквивалентный LDAP фильтр: (!(email=*))
Пример 8: Получаем объекты всех пользователей, которые не входили в систему с 1 января 2007 г.
$date = new-object System.DateTime -ArgumentList @(2007,1,1,0,0,0)
Get-ADUser -Filter { -not LastLogon -le $date }
Эквивалентный LDAP фильтр: (&(lastlogon<=X)(objectClass=user))
## где X – количество 100-наносекундных интервалов, прошедших с 1 января 1601 г.
Пример 9: Получаемвсехпользователей , которыевходиливсистемувпоследние 5 дней $date = (get-date) - (new-timespan -days 5)
Get-ADUser -Filter { lastLogon -gt $date }
Эквивалентный LDAP фильтр: (&(lastLogon>=128812906535515110) (objectClass=user)(!(objectClass=computer)))
Пример 10: Получаем все группы безопасности
Следующий запрос возвращает все объекты групп, у которых установлен флаг ADS_GROUP_TYPE_SECURITY_ENABLED (0x80000000 = 2147483648).
Get-ADGroup -filter { groupType -band 0x80000000 }
-или-
Get-ADGroup -filter { GroupCategory -eq "Security" }
Эквивалентный LDAP фильтр: (&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))
Пример 11: Проверяем, является ли пользователь членом группы (с использованием рекурсивного поиска)
Следующий пример запроса использует LDAP_MATCHING_RULE_IN_CHAIN - это OID правила, которое позволяет искать происхождение объекта.
Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com" -SearchScope Base
## ВНИМАНИЕ: Указанная вверху команда возвратит объект пользователя (Administrator в данном случае), если она найдет совпадение рекурсивно в атрибуте memberOf.
-или-
$userObj = Get-ADUser Administrator
$groupObj = Get-ADUser Administrators
Get-ADUser -Filter { memberOf -RecursiveMatch $userObj.DistinguishedName } -SearchBase $groupObj.DistinguishedName -SearchScope Base
Эквивалентный LDAP фильтр: (memberof:1.2.840.113556.1.4.1941:=(CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com)))
Cheers!
Swami
--
Swaminathan Pattabiraman [MSFT]
Developer – Active Directory Powershell Team
Перевод: Илья Лушников