0

Active Directory からすべてのユーザー関連情報を取得する必要があります。

私のコードusername,useremail, Full Nameはユーザーを取得しますが、マネージャーの名前を取得しようとすると、コードは例外をスローします。

以下は私のコードです:

DataTable table = new DataTable();
table = dt;

DirectoryEntry dEntry = new DirectoryEntry("LDAP://" + domain);

DirectorySearcher dSearch = new DirectorySearcher(dEntry);
SearchResultCollection sResultcol;

try
{
   dSearch.Filter = "(objectCategory=organizationalUnit)";
   sResultcol = dSearch.FindAll();

   foreach (SearchResult sResult in sResultcol)
   {
      DirectoryEntry dUserEntry = new DirectoryEntry();
      DirectorySearcher dSearchUsers = new DirectorySearcher(dEntry);

      SearchResultCollection sUserResults;
      dSearchUsers.Filter = "(objectClass=User)";
      dSearchUsers.SearchScope = SearchScope.Subtree;

      sUserResults = dSearchUsers.FindAll();

      foreach (SearchResult sUserResult in sUserResults)
      {
         DataRow dr = table.NewRow();
         string empCode = sResult.Properties["pager"].ToString();

         if (empCode.Length != 0)
         {
            dr["empcode"] = empCode;
            string namee = sUserResult.Properties["samaccountname"][0].ToString();
            dr["name"] = namee;
            string disname = sResult.Properties["distinguishedName"][0].ToString();
            dr["ou"] = disname;
            string manager = sUserResult.Properties["manager"].Value.ToString();
            dr["manager"] = manager;

            dt.Rows.Add(dr);
         }
      }

      dUserEntry.Close();
   }

   return dt;
}
catch (Exception ex)
{
    throw new Exception("Error at retrieveUsers() : " +       ex.Message.ToString());
}

私は例外を取得します

インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名:インデックス

マネージャーの名前を取得しようとすると。

Active Directory の構造により、マネージャーの名前は別のタブに表示されます。

Active Directory の [全般] 以外のタブからデータを取得する方法を知っている人はいますか?

私を助けてください。

前もって感謝します。

4

1 に答える 1

0

特定のユーザーのマネージャーのコンテンツ空である可能性があります。プロパティに値が割り当てられていない場合、Active Directory では.Properties[...]NULL になります。そのため、存在しないプロパティにアクセスする前に、そのことを確認する必要があります。

if(sUserResult.Properties["manager"] != null)
{
    string manager = sUserResult.Properties["manager"].Value.ToString();
}

また、このエントリはマネージャの DN (識別名) にすぎません。

CN=Joe Blow,OU=Sales,OU=Europe,DC=yourcompany,DC=com

マネージャーの「素敵な」表示名などは含まれていません....その情報を取得するには、DNを使用してマネージャーのユーザーオブジェクトにバインドし、そのデータも取得する必要があります。

また、実際にデータテーブルを設定しましたか?? 表示しているコードでは、作成しているだけですが、そのDataTable中に列を設定していないため、次のような割り当て

dr["empcode"] = empCode;

まだ列がないため、失敗するはずempcodeですDataTable...

于 2012-05-21T05:04:43.870 に答える