Share via


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

 

Оригинал: https://blogs.msdn.com/adpowershell/archive/2009/04/14/active-directory-powershell-advanced-filter-part-ii.aspx

Перевод: Илья Лушников