2011-02-10 3 views
2

먼저 현재 사용자의 모든 AD 그룹을 열거해야합니다. 의 SID와 이름을 얻는 것은 쉽다 : Active Directory 보안 그룹 구성원 수를 계산하십시오.

foreach(var group in WindowsIdentity.GetCurrent().Groups) 
{ 
    var sid = new SecurityIdentifier(group.Value); 
    string name = (group.Translate(typeof(NTAccount)) as NTAccount).Value; 
} 

는 다음 나는 그룹의 각 구성원의 수를 결정해야하고, 난 그 일을 얻을 수 없습니다. 현재 사용자 그룹의 고유 이름을 얻는 방법이 필요합니다. 그걸 어떻게 알아들을 수 있을까요? 내가 지금까지 무슨 짓을

:이 같은 WMI 쿼리를 시도했지만 내가 정규화 된 도메인 이름을 필요가 있기 때문에 어떤 결과를 반환하지만 NTAccount 나에게 단지 "친숙한"도메인 계정 (도메인 \ 그룹)를 제공합니다 :

var adGroupEntry = new DirectoryEntry(String.Format("LDAP://<SID={0}>", group.Value)); 
if (adGroupEntry != null) 
{ 
    IEnumerable members = adGroupEntry.Invoke("Members", null) as IEnumerable; 
    if (members != null) 
    { 
    foreach (object member in members) 
    { 
     noOfMembers++; 
    } 
    } 
} 

I :

SELECT PartComponent FROM Win32_GroupUser 
WHERE (GroupComponent = "Win32_Group.Domain='somedomain', Name='somegroup'") 

그런 다음 나는 그룹의 SID에 결합함으로써 누락 된 경로/고유 이름 주위에 작업 LDAP 시도 그룹이 발견되면 name 속성은 올바른 값을 반환하지만 Members에는 요소가 포함되지 않습니다. 그룹에 대한 전체 LDAP 경로를 (하드 코드 할 때와 같이) 알면 위의 코드는 실제로 그룹의 올바른 사용자 수를 산출합니다.

무엇이 여기에 있습니까? Active Directory 또는 WMI에 익숙하지 않습니다.

제한 :

  • 내가 할 수없는 하드 코드 도메인 이름 또는 LDAP 경로.
  • 저는 .NET 2.0으로 제한되어 있으므로 System.DirectoryServices.AccountManagement을 사용할 수 없습니다.

답변

1

내 환경에서 문제를 재현 할 수 있습니다. 나에게 ADSI의 버그처럼 들린다.

serverless bindingSID binding을 동시에 사용하면 반환 된 COM 개체가 작동하지 않습니다.

serverless bindnig를 사용하지 않으면이 문제를 해결할 수 있습니다. 즉 LDAP://*yourdomain.com*/<SID={0}>을 대신 사용하십시오.

개체를 다시 바인딩하여 해결할 수도 있습니다.

var adGroupEntry = new DirectoryEntry(String.Format("LDAP://<SID={0}>",group.Value)); 
string dn = adGroupEntry.Properties["distinguishedName"].Value as string; 
DirectoryEntry de = new DirectoryEntry("LDAP://" + dn); 
if (de != null) 
{ 
    IEnumerable members = de.Invoke("Members", null) as IEnumerable; 
    if (members != null) 
    { 
     foreach (object member in members) 
     { 
      noOfMembers++;  
     } 
    } 
} 
+0

내 코드와 해결 방법을 테스트 해 주셔서 감사합니다. 실제로 나에게도이 문제가 수정되었습니다.)이 정보의 입력 된 속성에는 QuickWatch의 유용한 콘텐츠가 포함되지 않았으므로 속성과 구분되는 이름을 얻을 수있을 것으로 기대하지 않았습니다. – realMarkusSchmidt