9

プログラムが Active Directory 環境で実行されているかどうかを検出するにはどうすればよいですか?

C# と .Net 2.0 を使用しています

4

5 に答える 5

7

Environment.UserDomainName を取得し、それを Environment.MachineName と比較してみてください。2 つが同じ場合、ユーザーがドメインを持っていない可能性があります。それらが同じでない場合、ユーザーはディレクトリ サーバーが必要なドメインにログインしています。

于 2008-09-26T16:43:52.017 に答える
4

このコードは、コンピューター自体がドメインのメンバーであるかどうかを確認します

using System.DirectoryServices.ActiveDirectory;


bool isDomain = false;

try
{
    Domain.GetComputerDomain();
    isDomain = true;
}
catch (ActiveDirectoryObjectNotFoundException)
{
}

ただし、コンピューターはドメイン内にある可能性がありますが、現在ログインしているユーザーはローカル ユーザー アカウントである可能性があります。これを確認したい場合は、Domain.GetCurrentDomain()関数を使用します

于 2008-09-26T17:44:08.253 に答える
2

1 つの方法は、LOGONSERVER 環境変数を照会することです。これにより、ADコントローラーのサーバー名が表示されます...現在ドメインにログインしていない場合、私の知る限り、空白になります(または現在のワークステーションと一致しますか?わかりません)。

使用例:

string ADServer = Environment.GetEnvironmentVariable("LOGONSERVER"); 
于 2008-09-26T16:40:18.360 に答える
1

私はうまくいくものを見つけました:

System.Net.NetworkInformationを使用します。

IPGlobalProperties.GetIPGlobalProperties()。DomainName;

ローカルユーザーとドメインユーザーで動作します。

于 2008-09-26T18:52:21.460 に答える
1

http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.path.aspxから

LDAP を使用して現在のドメインにバインドするには、パス「LDAP://RootDSE」を使用し、デフォルトのネーミング コンテキストを取得してエントリを再バインドします。

したがって、ドメインがないと、「LDAP://RootDSE」へのバインドは失敗するか、何も返されません。私は自分でそれを試しませんでした。

use System.DirectoryServices; // add reference to system.directoryservices.dll

...

DirectoryEntry ent = new DirectoryEntry("LDAP://RootDSE");
String str = ent.Properties["defaultNamingContext"][0];
DirectoryEntry domain = new DirectoryEntry("LDAP://" + str);

これは、環境変数 (ユーザーがプログラムを偽装するために削除または追加する可能性がある) に依存するよりも、明らかに Active Directory をチェックするよりクリーンな方法です。

于 2008-09-26T17:31:12.497 に答える