sergey vasin

The IT blog

-band, -bor и их LDAP-аналоги

leave a comment »

Как мы знаем, многие атрибуты объектов Active Directory представлены в виде битовых масок. Например, такие как UserAccountControl для объектов пользователя или компьютера или GroupType для объекта группы.

И хотя командлеты модуля ActiveDirectory представляют эти значения в виде отдельных атрибутов, скрывая от пользователя их истинную природу, иногда нам все-таки приходится работать с ними напрямую.

Давайте для простоты возьмем второй флаг атрибута UserAccountControl — ADS_UF_ACCOUNTDISABLE. Установка этого флага в 1 означает, что объект — пользователя или компьютера — отключен (Disabled), если же значение этого флага равно нулю — объект активен (Enabled).

Тут стоит сказать, что при использовании командлетов модуля ActiveDirectory нам доступно свойство Enabled, которое отражает значение этого флага, и которое вы скорее всего и будете использовать в обычных обстоятельствах. Но одним флагом ADS_UF_ACCOUNTDISABLE все дело не ограничивается, и подходы, рассматриваемые в данной статье вы сможете применить как при работе с другими флагами, так и при запросе значения этого же флага посредством ADSI — Active Directory Service Interfaces.

Для того, чтобы проверить, активен ли объект пользователя при помощи командлета Get-ADUser и параметра -Filter, нам потребуется воспользоваться оператором -band, то есть побитовым И:

$user = Get-ADUser -Identity someuser -Properties UserAccountControl
$user.UserAccountControl -band 2

В этом случае, если в качестве результата будет возвращен ноль, то учетная запись пользователя someuser активна — то есть второй флаг, позиционное значение которого равно двум, не установлен.

Если же результатом будет то самое значение 2 — это означает, что флаг установлен и аккаунт деактивирован.

В том случае, если мы хотим вывести объекты только активных пользователей, нам потребуется следующая команда:

Get-ADUser -Filter {-not (userAccountControl -band 2)}

Понятно, что при этом вы можете воспользоваться и дополнительными условиями фильтрации, чтобы еще больше сократить объем выводимой информации.

Если же мы решили воспользоваться параметром -LDAPFilter, то в этом случае синтаксис будет несколько другим:

Get-ADUser -LDAPFilter '(!userAccountControl:1.2.840.113556.1.4.803:=2)'

Как мы видим, в этом случае символ ! используется вместо оператора -not, а строка :1.2.840.113556.1.4.803:= — вместо -band.

1.2.840.113556.1.4.803 — это Object ID правила LDAP_MATCHING_RULE_BIT_AND, то есть того же самого побитового И.

Именно он нам потребуется при выполнении запросов через ADSI.

$ADSISearcher = [adsisearcher]'(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))'
$ADSISearcher.FindAll()

Что же касается оператора -bor, то Object ID эквивалентного ему правила — 1.2.840.113556.1.4.804 — LDAP_MATCHING_RULE_BIT_OR и вы точно так же можете использовать его в разного рода запросах.


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Сентябрь 11, 2017 в 13:31

Опубликовано в Active Directory, PowerShell

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s