当前位置: 首页 > 编程语言 > C#

在ActiveDirectory中获取计算机的最后登录时间分享

时间:2023-04-10 12:51:31 C#

获取ActiveDirectory中计算机的最后登录时间如何从ActiveDirectory中获取用户列表?请参阅上面的页面。它回答了我的大部分问题,但是当我尝试获取计算机的上次登录时间时,我遇到了问题。抱歉,如果有某种方法可以在该页面上发表评论而不是提出一个全新的问题,因为我没有找到这样的选项。使用(varcontext=newPrincipalContext(ContextType.Domain,"cat.pcsb.org")){使用(varsearcher=newPrincipalSearcher(newComputerPrincipal(context))){foreach(varresultinsearcher.FindAll()){DirectoryEntryde=result.GetUnderlyingObject()asDirectoryEntry;Console.WriteLine("姓名:"+de.Properties["姓名"].Value);Console.WriteLine("上次登录时间:"+de.Properties["lastLogon"].Value);控制台.WriteLine();}}}控制台.ReadLine();我用ComputerPrincipal替换了UserPrincipal。名称和其他一些属性工作正常,但登录不。我试过做不同的事情,比如将它转换为DateTime(转换失败),但没有任何效果。上面的结果只是System.__ComObject。那么我该怎么做才能让它正确获取上次登录时间呢?为什么不直接使用ComputerPrincipal返回的LastLogon属性?(ComputerPrincipal是一个AuthenicatablePrincipal)使用(varcontext=newPrincipalContext(ContextType.Domain,"cat.pcsb.org")){使用(varsearcher=newPrincipalSearcher(newComputerPrincipal(context))){foreach(varresultinsearcher.FindAll()){varauth=resultasAuthenticablePrincipal;if(auth!=null){Console.WriteLine("名称:"+auth.Name);Console.WriteLine("上次登录时间:"+auth.LastLogon);控制台.WriteLine();}}}}控制台.ReadLine();请注意,LastLogon不是复制属性,因此如果您有多个域控制器,则需要查询每个控制器并找出谁给出了最新结果。您需要遍历所有域控制器并找到最新的登录时间。以下代码查找用户的上次登录时间。publicDateTimefindlastlogon(stringuserName){DirectoryContextcontext=newDirectoryContext(DirectoryContextType.Domain,"domainName");DateTimelatestLogon=DateTime.MinValue;DomainControllerCollectiondcc=DomainController.FindAll(context);Parallel.ForEach(dcc.Cast(),dc1=>{DirectorySearcherds;DomainControllerdc=(DomainController)dc1;使用(ds=dc.GetDirectorySearcher()){try{ds.Filter=String.Format("(sAMAccountName={0})",userName);ds.PropertiesToLoad.Add("lastLogon");ds.SizeLimit=1;SearchResultsr=ds.FindOne();if(sr!=null){DateTimelastLogon=DateTime.MinValue;如果(sr.Properties.Contains("lastLogon")){lastLogon=DateTime.FromFileTime((long)sr.Properties["lastLogon"][0]);}if(DateTime.Compare(lastLogon,latestLogon)>0){latestLogon=lastLogon;//servername=dc1.Name;}}}catch(Exception){}}});返回最新登录;}要获取计算机的上一次登录时间,请将sAMAccountName替换为Name。ds.Filter=String.Format("(Name={0})",userName);以上就是C#学习教程:在ActiveDirectory中获取电脑上次登录时间分享的所有内容,如果对大家有用还有需要了解更多C#学习教程的,希望大家多多关注it-本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: