0

以下のコードは問題なく動作しますが、コードによって結果が 1500 ユーザーに制限されており、1500 人を超えるユーザーがいます。私がやろうとしているのは、特定のグループのメンバーであるすべてのユーザーのリストを取得することです。PageSize 設定があることは知っDirectorySearcherていますが、DirectoryEntry PageSize を設定する方法を見つけることができず、そのグループのメンバーのみをプルします。

ページサイズを変更する方法を知っている人はいますか? または、特定のグループのメンバーをページサイズに対応する別の方法でプルする方法はありますか?

DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://CN=Users,OU=MyOu,OU=Clients,OU=Home,DC=bridgeTech,DC=net");
foreach (object dn in dEntryhighlevel.Properties["member"])
{
    DirectoryEntry singleEntry = new DirectoryEntry("LDAP://" + dn);
    DirectorySearcher dSearcher = new DirectorySearcher(singleEntry);
    //filter just user objects
    dSearcher.SearchScope = SearchScope.Base;
    //dSearcher.Filter = "(&(objectClass=user)(dn=" + dn + "))";
    //dSearcher.PageSize = 1000;
    SearchResult singleResult = null;
    singleResult = dSearcher.FindOne();
    if (singleResult != null)
    {
        string Last_Name = singleResult.Properties["sn"][0].ToString();
        string First_Name = singleResult.Properties["givenname"][0].ToString();
        string userName = singleResult.Properties["samAccountName"][0].ToString();
        string Email_Address = singleResult.Properties["mail"][0].ToString();
        OriginalList.Add(Last_Name + "|" + First_Name + "|" + userName + "|" + Email_Address);
    }
    singleEntry.Close();
}
4

2 に答える 2

1

これは最近別のスレッドで取り上げられました: PowerShell を使用して常に配布リストの 1500 メンバーを取得しています

つまり、範囲検索を使用してメンバーシップを取得します。これは、値が 1500 を超える大きな属性をフェッチできるように設計されたメカニズムです。

このトピックについて話している間、あなたの次のスレッドを予測したいと思います. :) グループのメンバーシップを読み取ると、使用する API によっては結果が失われます。「金属に近い」状態で LDAP API を使用している場合、プライマリ グループ メンバーシップが原因でグループ内のユーザーが見つからないことがわかります。範囲検索の問題を解決した後、使用するアプローチでこれをテストして、誰も見逃していないことを確認します. 詳細はこちら:メンバー属性が機能しない場合にアクティブ ディレクトリからグループ メンバー/メンバーシップを取得する

于 2012-08-31T20:27:00.080 に答える
0

私は現在、これに似たものに取り組んでおり、あなたのコードが私のコードとわずかに異なることに気付きました。次のコード構造を使用すると、限られた結果で問題は発生しませんでした。

DirectoryEntry dEntryhighlevel = new DirectoryEntry("LDAP://CN=Users,OU=MyOu,OU=Clients,OU=Home,DC=bridgeTech,DC=net");
DirectorySearcher dSearcher = new DirectorySearcher();
//filter just user objects
dSearcher.Filter = "(objectClass=user)";
dSearcher.PageSize = 1000;
SearchResultCollection resultCollection = dirSearcher.FindAll();
foreach (SearchResult userResults in resultCollection )
{
    string Last_Name = userResults .Properties["sn"][0].ToString();
    string First_Name = userResults .Properties["givenname"][0].ToString();
    string userName = userResults .Properties["samAccountName"][0].ToString();
    string Email_Address = userResults .Properties["mail"][0].ToString();
    OriginalList.Add(Last_Name + "|" + First_Name + "|" + userName + "|" + Email_Address);
}

これにより、すべてのユーザーが返されます。dSearcher.Filterユーザーを特定のグループに絞り込むには、LDAP 検索パターンを使用する必要があります 。追加のヘルプについては、このリンクを参照してください。

于 2012-08-31T14:34:13.340 に答える