3

私はActive Directoryに対していくつかのc#をコーディングしていますが、これを無駄に機能させるために際限なく試みました。次のコードは機能しますが、それに続くコードは機能しません。

以下のコードは、"WinNT://" + Environment.MachineName + ",Computer" を使用して接続を確立し、正常に動作します。

   DirectoryEntry localMachine = new DirectoryEntry
        ("WinNT://" + Environment.MachineName + ",Computer");

    DirectoryEntry admGroup = localMachine.Children.Find
        ("Administrators", "group");

    object members = admGroup.Invoke("members", null);

    foreach (object groupMember in (IEnumerable)members)
    {
        DirectoryEntry member = new DirectoryEntry(groupMember);
        output.RenderBeginTag("p");
        output.Write(member.Name.ToString());
        output.RenderBeginTag("p");
    }



    base.Render(output);

私は今、行を変更しようとしています:

"WinNT://" + Environment.MachineName + ",Computer"

"LDAP://MyDomainControllerName"

しかし、値「MyDomainControllerName」の代わりにどの値を試しても機能しないようです。

「MyDomainControllerName」の値を取得するために、MyComputer を右クリックし、他の場所で提案されているようにコンピューター名の値をコピーしましたが、これは機能しませんでした。


上記の LDAP://RootDSE オプションを使用しようとすると、次のエラーが発生します。

パス LDAP://RootDSE にある Active Directory オブジェクトはコンテナではありません

あなたが言及したように、これはメンバーメソッドの問題ですか?

4

5 に答える 5

7

はい- RootDSE はコンテナーではありませんが、ドメイン コントローラーの名前など、照会できる多くの興味深いプロパティを保持しています。

これらは、次のようなコードを使用して確認できます。

DirectoryEntry deRoot = new DirectoryEntry("LDAP://RootDSE");

if (deRoot != null)
{
  Console.WriteLine("Default naming context: " + deRoot.Properties["defaultNamingContext"].Value);
  Console.WriteLine("Server name: " + deRoot.Properties["serverName"].Value);
  Console.WriteLine("DNS host name: " + deRoot.Properties["dnsHostName"].Value);

  Console.WriteLine();
  Console.WriteLine("Additional properties:");
  foreach (string propName in deRoot.Properties.PropertyNames)
    Console.Write(propName + ", ");
  Console.WriteLine();
}

または、手間を省いて、私の「Beavertail ADSI Browser」を C# ソース コードで入手してください。RootDSE に接続する方法と、それが提供するものを詳しく示しています。

于 2009-01-31T22:18:16.200 に答える
6

.NET Framework を使用して AD に接続する場合、「サーバーレス」バインディングを使用するか、毎回使用するサーバーを指定できます (サーバー バインド)。

両方を使用する例を次に示します。

// serverless
DirectoryEntry rootConfig = new DirectoryEntry("LDAP://dc=domainname,dc=com");

// server bound
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://domainControllerName/dc=domainName,dc=com");

最後にドメインの FQDN を含めるのを忘れたことが原因だと思います。お役に立てれば。

于 2009-01-22T15:42:18.950 に答える
0

許可されたユーザー名とパスワードを渡す必要があります。
設定してみてください: DirectoryEntry.Username および DirectoryEntry.Password

于 2009-01-22T15:35:02.273 に答える
0

ポート番号やその他のパラメータを指定しようとしましたか?

LDAP 文字列は次のようになります: LDAP://myserver:1003/cn=admin@xyz.com|1,ou=Members,o=mdhfw2

于 2009-01-22T15:37:00.380 に答える