Powershell – несколько фильтров для ActiveDirectory


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

Если установлен модуль ActiveDirectory, то можно использовать его командлеты для выполнения запросов.

Если же запрос надо выполнить на компьютере, где нет этого модуля (компьютер пользователя, например), то нужно использовать ADSI.

И, наконец, можно просто получить все SID дескриптора безопасности пользователя (включая SID History).

Запрос LDAPFilter Filter
Пользователи в группе (прямое вхождение) (&(objectCategory=person)(objectClass=user) (memberOf=cn=TestGroup,ou=Dep, dc=Domain,dc=com)) (Get-ADGroup TestGroup –Properties «Members»).Members | Where objectClass -eq «user»

Get-ADGroupMember TestGroup | Where objectClass -eq » user»

Группы пользователя (прямое вхождение) (&(objectCategory=group)(objectClass=group) (member=cn=TestUser,ou=Dep,

dc=Domain,dc=com))

(Get-ADUser TestUser –Properties MemberOf). MemberOf
Пользователи в группе (рекурсивное вхождение) (&(objectCategory=person)(objectClass=user) (memberOf:1.2.840.113556.1.4.1941:=

cn=TestGroup,ou=Dep,dc=Domain,dc=com))

$dn=(Get-ADGroup TestGroup). Distinguishedname

Get-ADUser –Filter «memberof –RecursiveMatch ‘$dn'»

Get-ADGroupMember –Recursive TestGroup | Where objectClass -eq «group»

Группы пользователя (рекурсивное вхождение) (&(objectCategory=group)(objectClass=group) (member:1.2.840.113556.1.4.1941:=

cn=TestUser,ou=Dep,dc=Domain,dc=com))

$dn=(Get-ADUser TestUser). Distinguishedname

Get-ADGroup –Filter «member –RecursiveMatch ‘$dn'»

Для компьютеров objectClass=user заменяем на objectClass=computer, а Get-ADUser на Get-ADComputer

1. Пример использования LDAP фильтра:

$s=([adsisearcher]"filter") .FindAll()

Тоже с получением всех свойств:

$s=([adsisearcher] "filter") .FindAll().GetDirectoryEntry()

Расширенный пример Finding Recursive AD Memberships

2. Проверка что пользователь входит в группу (рекурсивно):

$user = ([adsisearcher]"(&(objectCategory=person)(objectClass=user)(samaccountname=<span style="text-decoration:underline;">ИМЯ</span>))").FindOne().Path
$group=([adsisearcher]"(&(objectCategory=group)(objectClass=group)(samaccountname=<span style="text-decoration:underline;">ИмяГруппы</span>))").FindOne().Path
([adsisearcher]"(&(objectCategory=group)(objectClass=group)(member:1.2.840.113556.1.4.1941:=$user))").FindAll().Path -contains $group

Аналогично будет для компьютера, только objectClass=computer в первом запросе.

3. Получение «дескриптора» безопасности (SID всех групп, в которые входит пользователь, включая SID History):

$user = Get-ADUser Имя
$user1 = Get-ADUser -Filter * -SearchScope Base -Properties TokenGroups -SearchBase "$($user.DistinguishedName)"

Или

$user = ([adsisearcher]"(&amp;(objectCategory=person)(objectClass=user)(samaccountname=<span style="text-decoration:underline;">ИМЯ</span>))").FindOne().GetDirectoryEntry()
$user.psbase.refreshCache(@("TokenGroups"))
$secirc = new-object System.Security.Principal.IdentityReferenceCollection
foreach($sidByte in $user.TokenGroups)
{
 $secirc.Add((new-object System.Security.Principal.SecurityIdentifier $sidByte,0))
}
$groups = $secirc.Translate([System.Security.Principal.NTAccount])
$groups

4. Другие примеры LDAP фильтров

Реклама

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

%d такие блоггеры, как: