0

ユーザーがローカル マシンの管理者グループに存在するかどうかを確認するコードがあります。ユーザーが管理者グループに直接存在する場合、コードは正常に機能します

using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")) {
    foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
    {
        using (DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            if (memberEntry.Name.ToLower() == UserName.ToLower())
            {
                IsUserAdmin = true;
                break;
            }
        }
    } }

ただし、ユーザーが AD グループに存在し、その AD グループが管理者グループに追加されている場合、コードは失敗します。もう 1 つのケースは、ユーザーがネストされた AD グループの一部であり、最終的な AD グループが管理者グループに追加される場合です。

ユーザーが直接追加され、関連する AD グループが存在する場合、ユーザーが管理者グループの一部であるかどうかを確認するにはどうすればよいですか?

コードを Windows Server 2008、2008 R2、および 2012 で動作させたい

4

2 に答える 2

2

ユーザーのすべての AD グループを見つけて、そのグループが以前のように管理者グループに存在するかどうかを確認しないのはなぜですか? こちらの解決策に従って、ユーザーのすべての AD グループを見つけることができます。その後、次のように検索条件を変更できます。

var adminGroupMembers = (IEnumerable)groupEntry.Invoke("Members");
....
//where userGroups contains all AD group names to which user belongs to
foreach(var group in userGroups)
{ 
   if(adminGroupMembers.Contains(group))
   {
      IsUserAdmin = true;
      break;
   }
}
于 2013-01-11T19:30:04.547 に答える