C# 从搜索中排除域控制器

C# 从搜索中排除域控制器,c#,active-directory,C#,Active Directory,我试图在Active Directory中列出用户所属的组。该程序运行良好,但是,我需要确保该程序将一些DC服务器(特别是备份DC)从其搜索中排除。如果有帮助的话,备份DC都以INT开头 这是我代码中的相对剪报 using System.DirectoryServices.AccountManagement; using System.DirectoryServices.ActiveDirectory; ... public List<GroupPrincipal> Get

我试图在Active Directory中列出用户所属的组。该程序运行良好,但是,我需要确保该程序将一些DC服务器(特别是备份DC)从其搜索中排除。如果有帮助的话,备份DC都以INT开头

这是我代码中的相对剪报

using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;
...

    public List<GroupPrincipal> GetGroups(string userName)
    {
        List<GroupPrincipal> result = new List<GroupPrincipal>();

        UserPrincipal user = null;
        try
        {
            user = UserPrincipal.FindByIdentity(ctx, userName);
        }
        catch 
        {
            System.Windows.Forms.MessageBox.Show("Invalid User");
        }

        if (user != null)
        {
            //---need to exclude a subset of Domain Controllers from the---
            //---following search---
            PrincipalSearchResult<Principal> groups = user.GetGroups();

            foreach (Principal p in groups)
            {
                if (ckbissecuritygroup.Checked == true) {
                    if (p is GroupPrincipal)
                    {
                        GroupPrincipal gp = (p as GroupPrincipal);
                        if (gp.IsSecurityGroup == true)
                        {
                            result.Add((GroupPrincipal)p);
                        }
                    }
                }
                else
                {
                    if (p is GroupPrincipal)
                    {
                        result.Add((GroupPrincipal)p);
                    }
                }
            }
            return result.OrderBy(x => x.Name).ToList();
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Invalid User: " + userName);
            return result;
        }
    }
使用System.DirectoryServices.AccountManagement;
使用System.DirectoryServices.ActiveDirectory;
...
公共列表GetGroups(字符串用户名)
{
列表结果=新列表();
UserPrincipal user=null;
尝试
{
user=UserPrincipal.FindByIdentity(ctx,用户名);
}
抓住
{
System.Windows.Forms.MessageBox.Show(“无效用户”);
}
如果(用户!=null)
{
//---需要从中排除域控制器的子集---
//---跟踪搜索---
PrincipalSearchResult groups=user.GetGroups();
foreach(组中的主体p)
{
if(ckbissecuritygroup.Checked==true){
if(p是GroupPrincipal)
{
GroupPrincipal gp=(p作为GroupPrincipal);
if(gp.IsSecurityGroup==true)
{
结果。添加((GroupPrincipal)p);
}
}
}
其他的
{
if(p是GroupPrincipal)
{
结果。添加((GroupPrincipal)p);
}
}
}
返回result.OrderBy(x=>x.Name).ToList();
}
其他的
{
System.Windows.Forms.MessageBox.Show(“无效用户:+用户名”);
返回结果;
}
}

我对C#还很陌生,所以我希望这是相对容易的。有什么想法吗?

你说的排除跟单信用证是什么意思?是否要避免连接到它们?在这种情况下,您需要在Principalcontext中指定一个有效的域控制器。如果我指定了一个DC,并且该DC由于任何原因被删除,那么我又回到了相同的问题中。问题是,有时程序会选择一个备份域控制器,该控制器在技术上是在线的,但没有访问权限。如果我可以排除备份域控制器,我应该很好。获取域中所有DC的列表并选择一个有效的DC,不包括您的备份DC。您可以使用Domain类枚举域中的所有可用DC,并使用DomainController.GetDomainController方法查找工作DC这些“备份”DC是否在单独的站点中?不,它们不在单独的站点中。奥多维茨,我认为你的想法是最好的。我目前被分配到其他工作,但我会尽快尝试。