25

次のコードは、すべてではなく一部の Active Directory グループを一覧表示します。なんで?

すべてのセキュリティ グループ、配布グループ、コンピュータ グループなどを一覧表示しようとしています。間違ったものを指定しましたobjectClassか?

private static void ListGroups()
{
    DirectoryEntry objADAM = default(DirectoryEntry);
    DirectoryEntry objGroupEntry = default(DirectoryEntry);
    DirectorySearcher objSearchADAM = default(DirectorySearcher);
    SearchResultCollection objSearchResults = default(SearchResultCollection);
    SearchResult myResult=null;

    objADAM = new DirectoryEntry(LDAP);
    objADAM.RefreshCache();
    objSearchADAM = new DirectorySearcher(objADAM);
    objSearchADAM.Filter = "(&(objectClass=group))";
    objSearchADAM.SearchScope = SearchScope.Subtree;
    objSearchResults = objSearchADAM.FindAll();

    // Enumerate groups 
    try
    {
        fileGroups.AutoFlush = true;
        if (objSearchResults.Count != 0)
        {
            foreach (SearchResult objResult in objSearchResults)
            {
                myResult = objResult;
                objGroupEntry = objResult.GetDirectoryEntry();
                Console.WriteLine(objGroupEntry.Name);
                fileGroups.WriteLine(objGroupEntry.Name.Substring(3));
            }
        }
        else
        {
            throw new Exception("No groups found");
        }  
    } 
    catch (PrincipalException e)
    {
        fileErrorLog.AutoFlush = true;
        fileErrorLog.WriteLine(e.Message + " " + myResult.Path);
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}
4

6 に答える 6

63

.NET 3.5以降を使用している場合は、PrincipalSearcherおよび「例によるクエリ」プリンシパルを使用して検索を実行できます。

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a GroupPrincipal 
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

まだ読んでいない場合は、MSDNの記事「.NETFramework3.5でのディレクトリセキュリティプリンシパルの管理」を絶対に読んでくださいSystem.DirectoryServices.AccountManagement

于 2011-12-12T13:39:00.573 に答える
2

フィルター「(objectcategory=group)」を試してくださいここで解決策を見つけました

于 2011-12-12T13:04:17.550 に答える
0

1000 項目を超える一連の結果を取得するには、SizeLimit を既定値 (ゼロ) に設定し、PageSize を 1000 以下の値に設定する必要があります。

objSearchADAM.PageSize = 1000;

于 2018-12-27T13:10:38.827 に答える
0

以下の PowerShell ですべての広告グループの詳細を取得できます。AD グループに対して特定の名前が必要な場合は、* の代わりにフィルターを記述します。

Get-ADGroup -Filter * -properties * | Export-csv c:\csv\new.csv

于 2019-01-09T12:08:08.187 に答える