有没有办法从ASP.NET C#查询有效域列表,类似于登录寡妇时显示的列表?我想将此提供给客户端用户,以便他们可以选择用于登录Intranet Web应用程序的相应域。我尝试过使用Forest.GetCurrentForest但我似乎总是只回来一个域名,当时我肯定知道还有其他域名。
更新:(代码)
using System;
using System.Configuration;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;
namespace Domains {
class Program {
static void Main(string[] args) {
try {
using (Forest forest = Forest.GetCurrentForest()) {
Console.WriteLine("FOREST");
Console.WriteLine(" {0}", forest.Name);
Console.WriteLine("-------------------------------------------------------------------------------");
Console.WriteLine(" DOMAINS");
foreach (Domain domain in forest.Domains) {
Console.WriteLine(String.Format(" {0}", domain.Name));
Console.WriteLine(" TRUSTS");
TrustRelationshipInformationCollection domainTrusts = domain.GetAllTrustRelationships();
if (domainTrusts.Count == 0) {
Console.WriteLine(" N/A");
} else {
foreach (TrustRelationshipInformation trust in domainTrusts) {
DirectoryContext x = new DirectoryContext(DirectoryContextType.Domain, trust.TargetName);
Console.WriteLine(String.Format(" {0} -> {1}", trust.SourceName, trust.TargetName));
}
}
domain.Dispose();
}
Console.WriteLine("-------------------------------------------------------------------------------");
Console.WriteLine(" TRUSTS");
TrustRelationshipInformationCollection forestTrusts = forest.GetAllTrustRelationships();
if (forestTrusts.Count == 0) {
Console.WriteLine(" N/A");
} else {
foreach (TrustRelationshipInformation trust in forestTrusts) {
Console.WriteLine(String.Format(" {0} -> {1}", trust.SourceName, trust.TargetName));
}
}
}
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
Console.WriteLine("\nPress ESC to exit...");
do {
while (!Console.KeyAvailable) {
// Do something
}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);
}
}
}
现在当我直接登录机器(远程桌面等)时,我得到了一个我可以登录的6个域的列表,但是当上面的代码在同一台机器上运行时(目前只是一个用于测试的控制台应用程序) ,还没有启用ASP.NET),我得到一个域,即我登录机器的当前域。
编辑: 我想也许我会感到困惑,也许我真正想要的是NetBios域名。因为我刚刚意识到域名+所有信任等于我所寻找的域名数量,但这些是全名,而不是我所期望的短名称。
更新: 所以我能够使用LDAP查询获取主域名的netbiosname,但我不知道如何获取受信任域名的netbiosname ...
答案 0 :(得分:0)
如果您正在寻找森林使用的所有域名:
Forest.Domains
属性。返回一个DomainCollection。
GetCurrentForest
仅返回当前用户上下文的林。
Forest.GetCurrentForest().Domains
应返回所有域名。