Active directory Active Directory:获取用户的角色
1) -我正在寻找LDAP的查询(Active Directory)来获取给定用户的角色(组),而不指定用户的dinstinguished名称 我可以使用这个请求来获取它:(&(objectclass=group)(成员:1.2.840.113556.1.4.1941:=cn=admin,ou=users,ou=OUTest,dc=example,dc=com)) 但是我不想为用户指定整个根目录(ou=users,ou=OUTest,dc=example,dc=com) 2) -如何使用“sAMAccountName”而不是通用名CN获取给定用户的组 (*)成员:1.2.840.113556.1.4.1941用于获取Active Directory中的所有嵌套组Active directory Active Directory:获取用户的角色,active-directory,ldap,roles,Active Directory,Ldap,Roles,1) -我正在寻找LDAP的查询(Active Directory)来获取给定用户的角色(组),而不指定用户的dinstinguished名称 我可以使用这个请求来获取它:(&(objectclass=group)(成员:1.2.840.113556.1.4.1941:=cn=admin,ou=users,ou=OUTest,dc=example,dc=com)) 但是我不想为用户指定整个根目录(ou=users,ou=OUTest,dc=example,dc=com) 2) -如何使用“sAM
提前感谢。有关ActiveDirectory中的的的文档是明确的。重点地雷:
1.2.840.113556.1.4.1941
LDAP\u匹配\u链中的规则\u
此规则仅限于应用于DN的筛选器。这是一个特殊的“扩展”匹配运算符,它将对象中的祖先链一直带到根,直到找到匹配为止
除了完整DN之外,无法将其与任何内容一起使用,因为它与包含完整DN的属性相匹配
但我不想将整个根目录指定给用户
尽管运气好
以一种让用户使用更方便的方式构建程序,例如samAccountName
,并将其转换为具有完整DN的搜索字符串
例如,在Powershell中:
function Get-ADUserGroups($username) {
if ($username) {
Get-ADUser $username | ForEach-Object {
$userDN = $_.DistinguishedName
$ldapFilter = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=$userDN))"
Get-ADObject -LDAPFilter $ldapFilter
}
}
}
用法
或者,为了实现这一点,在常规Windows批处理(GetADUserGroups.bat)中使用相同的方法: 用法
Get-ADUserGroups userXYZ
@echo off
setlocal enabledelayedexpansion
set USER=%~1
if "%USER%" neq "" (
for /f "delims=" %%d in ('dsquery user -samid "%USER%"') do (
set "LDAP_FILTER=(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=%%~d))"
dsquery * -filter "!LDAP_FILTER!" -limit 1000
)
)
GetADUserGroups userXYZ