AD システムでユーザーのクエリを実行する必要があるイントラネットがあります。DirectoryEntry() オブジェクトを使用して接続し、DirectorySearcher() をセットアップしてユーザーを検索しようとしています。最も基本的なものに要約すると、私のコードは次のようになります。
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local");
DirectorySearcher ds = new DirectorySearcher(directoryObject);
ds.Filter = ("(&(objectClass=user))");
var test = ds.FindAll();
foreach (SearchResult item in test)
{
}
奇妙なことに、System.DirectoryServices DLL の .NET4.0 バージョンを参照すると、これは私の開発マシンでは機能しますが、.NET3.5 (System.DirectoryServices DLL のバージョンは v2.0.0.0) では機能しません。
私が得る特定のエラーはds.FindAll()
メソッドにあり、次のようになります。
例外の詳細: System.DirectoryServices.DirectoryServicesCOMException: 操作エラーが発生しました。
コードをステップ実行すると、directoryObject
オブジェクトが実際には最初の行で正しく初期化されていないことがわかります。コンストラクターは失敗しませんが、すべてのプロパティが例外をスローしています。
私が間違っているかもしれないアイデアはありますか?ありがとう、これはちょっとくだらない、漠然とした質問だと思います。
解決した
OK、ユーザー名とパスワードを受け入れる DirectoryEntry() コンストラクターのオーバーロードを使用して、これを修正できました。
DirectoryEntry directoryObject = new DirectoryEntry("LDAP://RD-HQ/CN=Users,DC=rd-hq,DC=local", "rd-hq.local\mick", "notmypassword");
これが.NET3.5バージョンと.NET4.0バージョンで異なる動作をする理由はまだわかりません.少なくともこのことをよりよく理解するのに役立つ答えを正しいものとして喜んでマークします.