一、 通过AccountManagement 程序集(System.DirectoryServices.AccountManagement)

acountManagement 包含有:

1. UserPrincipals

2. GroupPrincipal

3.ComputerPrincipals

4.SearchPrincipals

我们可以通过GroupPrincipals 方法拿出一组AD user

private static void AccountManagementGetUsers()

{
    var principalContext = new PrincipalContext(ContextType.Domain, "192.168.1.199", "CN=Users,DC=weihu,DC=com", ContextOptions.ServerBind, "administrator", "Password");
    var principals = new GroupPrincipal(principalContext);
    foreach (var members in principals.Members)
   {
       Console.WriteLine(members.DisplayName);
   }

}

二、通过 System.DirectoryServices直接获得ADuser

在 DirectoryServices 程序中 我们可以使用DirectorySearcher方法获得AD User.

private static void DirectoryConnection()
{
    var directoryEntry = new DirectoryEntry("LDAP://192.168.1.199", "administrator", "Password2");
    var filter = "(&(objectClass=user)(objectCategory=person)(mail=*)(company=Forefront Consulting Group))";
    var propertiesToLoad = new[] { "sAMAccountName", "givenName", "sn", "mail", "userPrincipalName" };
    var directorySearcher = new DirectorySearcher(directoryEntry, filter, propertiesToLoad);

var users = directorySearcher.FindAll().Cast<SearchResult>();
   foreach (var user in users)
  {
      if (user.Properties.Contains("samaccountname"))
      {
          Console.WriteLine(user.Properties["samaccountname"][0]);
       }
   }
}

三、通过System.DirectoryServices.Protocols拿到AD user

private static void LdapConnection()
{
     var server = "Ffazure01.cloudapp.net";
     var userName = "XXX";
     var passsword = "XXX";
     var port = 63600;
     var filter = "Ou=Users,ou=ffcg.local,dc=ffcg,dc=local";
     var propertiesToLoad = new string[] { "sAMAccountName" };
     try
    {
       //AD connection
      var ldapConnection = new LdapConnection(new LdapDirectoryIdentifier(server, port));
      ldapConnection.SessionOptions.SecureSocketLayer = true;
      ldapConnection.SessionOptions.ProtocolVersion = 3;
      ldapConnection.SessionOptions.VerifyServerCertificate = ServerCallback;
      ldapConnection.Credential = new NetworkCredential(userName, passsword);
      ldapConnection.AuthType = AuthType.Negotiate;
      ldapConnection.Bind();
      Console.WriteLine("connection success");
      //GetUser
      const string ldapSearchFilter = "(objectClass=*)";
      var searchRequest = new SearchRequest(filter, ldapSearchFilter, SearchScope.Subtree, propertiesToLoad);
      var searchResponse = (SearchResponse)ldapConnection.SendRequest(searchRequest);

if (searchResponse == null) return;
      foreach (SearchResultEntry entry in searchResponse.Entries)
     {
         var name = GetStringAttributeValue(entry, "sAMAccountName");
         Console.WriteLine(name);
      }
   }
   catch (Exception e)
   {
       hrow new Exception("Connect AD server error");
    }
}

private static bool ServerCallback(LdapConnection connection, X509Certificate certificate)
{
     return true;
}

private static string GetStringAttributeValue(SearchResultEntry entry, string attribute)

{

try
{
var attrs = entry.Attributes;
if (!attrs.Contains(attribute)) return null;

var directoryAttribute = attrs[attribute];
var attr = directoryAttribute.GetValues(typeof(string)).First() as string ?? "";
return attr;
}
catch (Exception e)
{
    throw new Exception("Could not get attribute " + attribute + "for " + entry.DistinguishedName, e);
}

}

Get AD user 的三种方法的更多相关文章

  1. STM32中AD采样的三种方法分析

    在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...

  2. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

  3. {转}Java 字符串分割三种方法

    http://www.chenwg.com/java/java-%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%88%86%E5%89%B2%E4%B8%89%E7%A7%8D%E6%9 ...

  4. 像画笔一样慢慢画出Path的三种方法(补充第四种)

    今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...

  5. JAVA之线程同步的三种方法

    最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchroni ...

  6. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  7. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  8. DataTable数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename); ...

  9. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

随机推荐

  1. C(n,k)在n个不重复数中获得k个数

    //比如在数组a[]={1,7,89,87} 中k=2的时候 组合为 C(4,2)=6 package 再次开始; import java.util.ArrayList; //本次实现的是在n个不重复 ...

  2. AABB碰撞盒

    矩形边界框(转) 另一种常见的用来界定物体的几何图元是矩形边界框,矩形边界框可以是与轴对齐的或是任意方向的.轴对齐矩形边界框有一个限制,就是它的边必须垂直于坐标轴.缩写AABB常用来表示axially ...

  3. 动态链接库DLL

    函数和数据被编译进一个二进制文件(通常扩展名为.LIB). 静态库: 在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文 ...

  4. 在win7的虚拟机中LINUX与winxp两客户机互通问题

    本人实际操作:两个虚拟机都选Host-Onl,查看主机VirtualBox Host-Only Network ip地址为192.168.56.1,那我让linux,windowsxp都让为该网址19 ...

  5. HW4.9

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  6. HW3.16

    public class Solution { public static void main(String[] args) { int randomValue = (int)(Math.random ...

  7. Linux 常见文件打包压缩命令

    .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!)       参数说明:         - ...

  8. 自己修改select的样式(修改select右边的小三角)

    CSS就可以解决,原理是将浏览器默认的下拉框样式清除,然后应用上自己的,再附一张向右对齐小箭头的图片即可. select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ ...

  9. Spring Cloud介绍 Spring Cloud与Dubbo对比

    spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状 ...

  10. JBPM学习(三):管理流程定义

    概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程.报销流程.是一个规则. ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程 ...