2016-09-28 23 views
0

1) - LDAPのクエリ(Active Directory)を使用して、指定されたユーザーの役割(グループ)を取得して、ユーザーの名前を指定せずに探します。Active Directory:ユーザーの役割を取得

このリクエストを使用してこれを取得できます。(&(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) - 共通名CNの代わりに "sAMAccountName"を使用して指定したユーザーのグループを取得するにはどうすればよいですか?

(*)メンバー:1.2.840.113556.1.4.1941は、Active Directory内のすべてのネストされたグループを取得するために使用されます。

ありがとうございます。

答えて

1

ActiveDirectoryの1.2.840.113556.1.4.1941 matching ruleに関するドキュメントは明白です。重点鉱山:

1.2.840.113556.1.4.1941
LDAP_MATCHING_RULE_IN_CHAIN

この規則は、DNに適用され、フィルタに制限されています。これは、マッチするものが見つかるまで、オブジェクトの祖先の連鎖をルートまで辿る特別な「拡張」マッチ演算子です。

完全なDNを含む属性と一致するため、完全なDN以外では使用できません。

しかし、私は、ユーザー

ものの運に全ルートを指定する必要はありません。 ;)

ユーザがもっと便利な方法で作業できるように、たとえばなどのプログラムをビルドし、完全な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 
     } 
    } 
} 

使用

Get-ADUserGroups userXYZ 

あるいは、それのために、通常のWindowsのバッチで同じこと(GetADUserGroups.bat) :

@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 
関連する問題