ドメインのメンバーではないコンピューター上のWindowsPEで実行しているときに、ActiveDirectoryにクエリを実行する.NETアプリケーションを作成する必要があります。
これは、Microsoft Deployment Toolkitタスクシーケンス中に実行されます(MDT 2012は、.NETのサポートをWinPE環境にロードするように構成されていることに注意してください。.NETアプリケーションは問題なく起動しています)。
以下のコードを使用してドメインにバインドしています。
DirectoryEntry entry = new DirectoryEntry(
path,
username,
password,
AuthenticationTypes.ServerBind | AuthenticationTypes.Secure);
path
私は両方の形式を試しました:
LDAP://domainServer/dc=domain,dc=name
また、ドメインコントローラー名なしで
LDAP://dc=domain,dc=name
username
また、フォームdomain\username
とだけの両方を使用してみましたusername
。
オブジェクトはDirectoryEntry
正常に構築Console.Writeline(entry.Name)
されているようですが、有効な接続が確立されていることを確認するために実行しようとすると、次の例外が発生します。
System.Runtime.InteropServices.COMException(0x80005000):System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()at System.DirectoryServices.DirectoryEntry.get_Name()で不明なエラー(0x80005000)
このコードの他のバリエーションを試したり、さまざまなフィルターを使用してLDAPクエリを実行したり、VBScriptで書き直したりしましたが、上記のコードは、問題を再現する最も簡単な例です。
私が読んだことから、このようなシナリオでは常に使用する必要がありAuthenticationTypes.ServerBind
、それがADSILDAPパス内のコードを指定しようとしている理由です。しかし、上記のコードの何が問題になっていますか?私には、パラメーターに必要なすべての情報をDirectoryEntry
コンストラクターに渡しているように見えます。