获取AD里面指定OU或Container里面的计算机以及Lastlogon时间格式转换

简介:

至于什么是活动目录,大家可以去这里了解

.NET读取Active Directory(活动目录)里面的User和Computer信息主要用到了System.DirectoryServices命名空间里面的对象。

这里我主要用到了两个对象DirectoryEntryDirectorySearch

复制代码
 1 //额外添加的命名空间
2 using System.DirectoryServices.ActiveDirectory;
3 using ActiveDs;
4
5 //ADComputerModel是自定义的实体对象
6 class Test
7 {
8 public List<ADComputerModel> GetComputer()
9 {
10 List<ADComputerModel> list = new List<ADComputerModel>();
11 DirectoryEntry deRoot = new DirectoryEntry();
12 deRoot.Username = "zhangxuefei";
13 deRoot.Password = "不告诉你";
14 deRoot.Path = "LDAP://域名/OU=**,DC=**,DC=**";
15 DirectorySearcher search = new DirectorySearcher();
16 search.SearchRoot = deRoot;
17 search.Filter = ("(objectClass=computer)");
18 DateTime? tmp = null;
19 foreach (SearchResult resEnt in search.FindAll())
20 {
21 var flag = resEnt.GetDirectoryEntry().Properties["Lastlogon"].Value;//获取最后登录时间
22
23 if (flag == null)
24 {
25 tmp = null;//这里也是Lastlogon当我们在AD里面创建一个计算机的时候什么都不设置的情况下的空值处理
26 }
27 else
28 {
29 //这里执行对Lastlogon时间格式的转换(因为Lastlogon的时间格式不是标准的时间格式需要转换)
30 //转换方法是在国外的网站上面查到的,需要引入Interop.ActiveDs.dll这个Com组件。实现的原理在这
31 LargeInteger largeInt = (LargeInteger)resEnt.GetDirectoryEntry().Properties["Lastlogon"][0];
32 Int64 liTicks = largeInt.HighPart * 0x100000000 + largeInt.LowPart;
33 if (liTicks == 0)
34 {
35 tmp = null;//这里也是Lastlogon在我们创建一个计算机的时候什么都不设置的情况下的空值处理
36 }
37 else if (DateTime.MaxValue.Ticks >= liTicks && DateTime.MinValue.Ticks <= liTicks)
38 {
39 tmp = DateTime.FromFileTime(liTicks);
40 }
41 }
42 list.Add(new ADComputerModel
43 {
44 ComputerName = resEnt.GetDirectoryEntry().Properties["CN"].Value.ToString(),//获取计算机名称
45 OSVersion = resEnt.GetDirectoryEntry().Properties["operatingsystem"].Value == null ? ""
: resEnt.GetDirectoryEntry().Properties["operatingsystem"].Value.ToString(),//获取操作系统名称
46 CreateTime = Convert.ToDateTime(resEnt.GetDirectoryEntry().Properties["whencreated"].Value),//获取创建时间
47 LastLoginTime = tmp//最后登录时间
48 //...可以根据自己的需要取不同的属性值
49 });
50 }
51 }
52
53 }
54
55 public class ADComputerModel
56 {
57 ///<summary>
58 /// 计算机名
59 ///</summary>
60 public string ComputerName { get; set; }
61
62 ///<summary>
63 /// 创建日期
64 ///</summary>
65 public DateTime? CreateTime { get; set; }
66
67 ///<summary>
68 /// 操作系统版本
69 ///</summary>
70 public string OSVersion { get; set; }
71
72 ///<summary>
73 /// 最后登录时间
74 ///</summary>
75 public DateTime? LastLoginTime { get; set; }
76 }
复制代码

明天就是六"1"节了,祝各各单们节日愉快!

本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2011/11/10/worknotes_3.html如需转载请自行联系原作者


张雪飞

相关文章
|
人工智能 文字识别 算法
linux系统中利用QT实现车牌识别的方法
linux系统中利用QT实现车牌识别的方法
275 0
|
Java 关系型数据库 MySQL
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
123 0
|
12月前
|
SQL 监控 Go
Golang Agent 可观测性的全面升级与新特性介绍
本文将逐个介绍 Golang Agent 的新增功能。
518 117
|
存储 缓存 NoSQL
redis缓存优化
采用获取一次缓存,如果为空的情况,获取分布式锁,让一个线程去重建缓存,另外的线程未获取到锁的情况,休眠短时间,然后再自旋获取缓存。
182 0
|
12月前
|
Shell 数据安全/隐私保护 Python
Django的用户的创建和修改密码
【10月更文挑战第17天】查找运行的django进程,使用python manage.py shell打开对应django进程
146 1
|
存储 搜索推荐 数据库
Web实战丨基于Django与HTML的用户登录验证系统
Web实战丨基于Django与HTML的用户登录验证系统
521 1
|
运维 安全 存储
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程
【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程
|
Java Android开发
【Java开发指南 | 第十八篇】Eclipse安装教程
【Java开发指南 | 第十八篇】Eclipse安装教程
163 2
|
Linux 网络安全
Centos6.5安装并配置NFS服务
该内容描述了在Linux系统中设置NFS服务的步骤。首先挂载yum源,然后安装NFS服务,并编辑配置文件。接着,重启rpcbind和NFS服务,可能需要重复此过程以解决初始可能出现的问题。此外,关闭防火墙策略,并再次重启服务。最终,根目录被共享,特定IP网段被允许访问。
252 0
|
开发框架 前端开发 JavaScript
探索前端开发框架:React、Angular 和 Vue 的对决(二)
探索前端开发框架:React、Angular 和 Vue 的对决(二)