Get AD user 的三种方法
一、 通过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 的三种方法的更多相关文章
- STM32中AD采样的三种方法分析
在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- {转}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 ...
- 像画笔一样慢慢画出Path的三种方法(补充第四种)
今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...
- JAVA之线程同步的三种方法
最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchroni ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- 转载:WinForm中播放声音的三种方法
转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...
随机推荐
- Hacking Secret Ciphers with Python翻译序言
马上就要下班,一直想做点什么,学点什么,但是似乎从未着手. 是的,我想学习Hacking,或许很多人都想学,但是诸多的大牛说,这个得有基础,万丈高楼平地起,我做过那么一点点的密码分析,加上某些地方有小 ...
- bzoj 3926 [Zjoi2015]诸神眷顾的幻想乡(SAM)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3926 [题意] 给定一棵树,每个节点都有相应的颜色,且保证叶子数不超过20,问 ...
- HW5.1
public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...
- Java NIO缓冲
缓冲区(buffer)是从即将写入通道(channel)或刚刚从通道中读出的一段数据.它是一个持有数据,并扮演NIO通道端点的对象.缓冲区为数据访问和读写过程提供正式机制. 它是NIO和老版Java ...
- hibernate三级缓存介绍
hibernate缓存机制:分为三种:1.一级缓存(session级别缓存,同一session中不会重复发出sql,默认会实现)2.二级缓存(跨session的缓存,不同session会从同一缓存中取 ...
- XML Drawable与9-Patches
可绘制对象资源 两种设计工具均属于drawable.Android把任何可绘制在屏幕上的图形图像都称为drawable drawable可以是一种抽象的图形.一个继承 Drawable 类的子类,或者 ...
- JSF学习四 标签
commandButton:提交.重置或下压button button:用于公布GET请求的按钮
- hello world是怎样运行的?
关于<深入理解计算机系统> “这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意.我这么说的原因在于这个译法完全扭曲了书的本意.如果直译原书名,应该是类似于“ ...
- iOS开发之蓝牙通信
一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...
- android88 录音机
package com.itheima.recorder; import android.os.Bundle; import android.app.Activity; import android. ...