NETCore 同步AD域组织和用户
BitAdminCore为没有自主开发框架的小团队,提供快速项目搭建及开发能力。
框架演示:http://bit.bitdao.cn
框架源码:https://github.com/chenyinxin/cookiecutter-bitadmin-core
不解释,直接上代码
//配置以下四个参数,开放389端口。
string domainName = "bitdao.cn";
string domainRoot = "组织单位";
string domainUser = "user";
string domainPass = "password";
public ActionResult Sync()
{
try
{
//连接域
DirectoryEntry domain = new DirectoryEntry();
domain.Path = string.Format("LDAP://{0}", domainName);
domain.Username = domainUser;
domain.Password = domainPass;
domain.AuthenticationType = AuthenticationTypes.Secure;
domain.RefreshCache(); DirectoryEntry entryOU = domain.Children.Find("OU=" + domainRoot);
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(objectclass=organizationalUnit)"); //查询组织单位
DirectoryEntry root = mySearcher.SearchRoot; //查找根OU if (root.Properties.Contains("ou") && root.Properties.Contains("objectGUID"))
{
string rootOuName = root.Properties["ou"][].ToString();
byte[] bGUID = root.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); departments.Add(new SysDepartment() { DepartmentId = id, DepartmentCode = id.ToString(), DepartmentName = rootOuName, DepartmentFullName = rootOuName }); SyncSubOU(root, id);
} //入库
foreach (var d in departments)
{
var department = dbContext.SysDepartment.Find(d.DepartmentId);
if (department == null)
dbContext.SysDepartment.Add(d);
else
{
department.DepartmentName = d.DepartmentName;
department.DepartmentFullName = d.DepartmentFullName;
department.ParentId = d.ParentId;
}
dbContext.SaveChanges();
}
foreach (var u in users)
{
var user = dbContext.SysUser.Find(u.UserId);
if (user == null)
{
u.CreateBy = u.UserId;
u.CreateTime = DateTime.Now;
dbContext.SysUser.Add(u);
}
else
{
user.UserCode = u.UserCode;
user.UserName = u.UserName;
user.DepartmentId = u.DepartmentId;
user.Mobile = u.Mobile;
user.Email = u.Email;
user.UpdateBy = u.UserId;
user.UpdateTime = DateTime.Now;
}
dbContext.SaveChanges();
} return Json(new { Code = , Msg = "同步成功!" });
}
catch (Exception ex)
{
LogHelper.SaveLog(ex);
return Json(new { Code = , Msg = "服务器异常,请联系管理员!" });
}
} List<SysUser> users = new List<SysUser>();
List<SysDepartment> departments = new List<SysDepartment>(); private void SyncSubOU(DirectoryEntry entry, Guid parentId)
{
foreach (DirectoryEntry subEntry in entry.Children)
{
string entrySchemaClsName = subEntry.SchemaClassName; string[] arr = subEntry.Name.Split('=');
string categoryStr = arr[];
string nameStr = arr[]; byte[] bGUID = subEntry.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); switch (entrySchemaClsName)
{
case "organizationalUnit":
departments.Add(new SysDepartment() { DepartmentId = id, ParentId = parentId, DepartmentCode = id.ToString(), DepartmentName = nameStr, DepartmentFullName = nameStr }); SyncSubOU(subEntry, id);
break;
case "user":
users.Add(new SysUser()
{
UserId = id,
UserCode = subEntry.Properties["samaccountName"][].ToString(),
DepartmentId = parentId,
UserName = subEntry.Properties["displayName"][].ToString(),
Email = subEntry.Properties.Contains("mail") ? subEntry.Properties["mail"][].ToString() : "",
Mobile = subEntry.Properties.Contains("telephoneNumber") ? subEntry.Properties["telephoneNumber"][].ToString() : ""
}); break;
}
}
}
NETCore 同步AD域组织和用户的更多相关文章
- NETCore调用AD域验证
一.添加引用 System.DirectoryServices System.DirectoryServices.AccountManagement 二.验证代码 声明域 string domainN ...
- JAVA 通过LDAP获取AD域用户及组织信息
因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...
- SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)
由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...
- SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)
前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...
- java集成微软的ad域,实现单点登录
1.ad域介绍: windos server 2008R2服务器下的ad域,见下图(我是在虚拟机安装到windos server) 2.连接ad域代码:(里面代码自行修改) public Result ...
- java修改AD域用户密码使用SSL连接方式
正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...
- gitlab用户登录与AD域用户集成
---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...
- 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2
创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...
- 如何查看/统计当前AD域控制器的活动用户?
最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...
随机推荐
- [Python] String strip() Method
Description The method strip() returns a copy of the string in which all chars have been stripped fr ...
- android 学习 之 布局(上)
学习安卓布局前,先了解三个属性值: 1.fill_parent: 设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间 2.match_parent: And ...
- XE7 update1
- [jOOQ中文] 七个步骤快速入门
https://segmentfault.com/a/1190000010415384 关于jOOQ jOOQ: The easiest way to write SQL in Java jOOQ是一 ...
- C#格式化数字
var t1 = Profiler.GetMonoHeapSize()/div; var t2 = Profiler.GetMonoUsedSize() / div; var t3 = Profile ...
- Marshaller根据对象生成xml文件
创建Girl.java类 import java.util.List; import javax.xml.bind.annotation.*; @XmlAccessorType(XmlAccessTy ...
- Information Retrieval II
[Information Retrieval II] 搜索引擎分类: 1.目录式搜索引擎. 2.全文搜索引擎. 3.元搜索引擎(Meta-Search Engine). 搜索引擎的4个阶段:下载(cr ...
- CMD-SVN查看版本修改记录
[CMD-SVN查看版本修改记录] 问题:想查看某个版本的具体修做了哪些改动? 方法:svn diff -r r1:(r1-1) (filename) filename可选,如果加上就表示查看 ...
- intellij idea运行Android程序时报错;Unable to locate adb within SDK
环境:intellij idea15 问题:运行Android时报错Throwable:Unable to locate adb within SDK 解决方法:在SDK安装目录的\platfor ...
- c++程序的多文件组织
当程序规模变大后,一个程序用多个文件组织,便于组织生产.这样,不必每次都重复对所有代码进行编译,而只需编译一次即可.把编译后所形成的目标文件保存起来,以后在需要时把它调出来直接与程序的目标文件相连接即 ...