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

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

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

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

 //额外添加的命名空间
 using System.DirectoryServices.ActiveDirectory;
 using ActiveDs;
 
 //ADComputerModel是自定义的实体对象
 class Test
 {
     public List GetComputer()
     {
         List list = new List();
         DirectoryEntry deRoot = new DirectoryEntry();
         deRoot.Username = "zhangxuefei";
         deRoot.Password = "不告诉你";
         deRoot.Path = "LDAP://域名/OU=**,DC=**,DC=**";
         DirectorySearcher search = new DirectorySearcher();
         search.SearchRoot = deRoot;
         search.Filter = ("(objectClass=computer)");
         DateTime? tmp = null;
         foreach (SearchResult resEnt in search.FindAll())
         {
             var flag = resEnt.GetDirectoryEntry().Properties["Lastlogon"].Value;//获取最后登录时间
 
             if (flag == null)
             {
                 tmp = null;//这里也是Lastlogon当我们在AD里面创建一个计算机的时候什么都不设置的情况下的空值处理
             }
             else
             {
                 //这里执行对Lastlogon时间格式的转换(因为Lastlogon的时间格式不是标准的时间格式需要转换)
                 //转换方法是在国外的网站上面查到的,需要引入Interop.ActiveDs.dll这个Com组件。实现的原理在这
                 LargeInteger largeInt = (LargeInteger)resEnt.GetDirectoryEntry().Properties["Lastlogon"][0];
                 Int64 liTicks = largeInt.HighPart * 0x100000000 + largeInt.LowPart;
                 if (liTicks == 0)
                 {
                     tmp = null;//这里也是Lastlogon在我们创建一个计算机的时候什么都不设置的情况下的空值处理
                 }
                 else if (DateTime.MaxValue.Ticks >= liTicks && DateTime.MinValue.Ticks <= liTicks)
                 {
                     tmp = DateTime.FromFileTime(liTicks);
                 }
             }
             list.Add(new ADComputerModel
             {
                 ComputerName = resEnt.GetDirectoryEntry().Properties["CN"].Value.ToString(),//获取计算机名称
                 OSVersion = resEnt.GetDirectoryEntry().Properties["operatingsystem"].Value == null ? "" 
                               resEnt.GetDirectoryEntry().Properties["operatingsystem"].Value.ToString(),//获取操作系统名称
                 CreateTime = Convert.ToDateTime(resEnt.GetDirectoryEntry().Properties["whencreated"].Value),//获取创建时间
                 LastLoginTime = tmp//最后登录时间
                 //...可以根据自己的需要取不同的属性值
             });
         }
     }
    
 }
                 
 public class ADComputerModel
 {
     ///
 /// 计算机名
 ///
     public string ComputerName { get; set; }
 
     ///
 /// 创建日期
 ///
     public DateTime? CreateTime { get; set; }
     ///
 /// 操作系统版本
 ///
     public string OSVersion { get; set; }
 
  ///
 /// 最后登录时间
 ///
     public DateTime? LastLoginTime { get; set; }
 }

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

作者:张雪飞
出处:https://zhangxuefei.site/p/319
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

发表评论

电子邮件地址不会被公开。 必填项已用*标注