c# – 查询过去24小时内创建的所有计算机对象的LDAP
发布时间:2020-12-15 17:25:50 所属栏目:百科 来源:网络整理
导读:我试图使用LDAP查询返回在过去24小时内创建的所有计算机对象.我的代码目前看起来像这样: //Declare new DirectoryEntry and DirectorySearcherDirectoryEntry domainRoot = new DirectoryEntry("LDAP://rootDSE");string rootOfDomain = domainRoot.Propert
我试图使用LDAP查询返回在过去24小时内创建的所有计算机对象.我的代码目前看起来像这样:
//Declare new DirectoryEntry and DirectorySearcher DirectoryEntry domainRoot = new DirectoryEntry("LDAP://rootDSE"); string rootOfDomain = domainRoot.Properties["rootDomainNamingContext"].Value.ToString(); DirectorySearcher dsSearch = new DirectorySearcher(rootOfDomain); //Set the properties of the DirectorySearcher dsSearch.Filter = "(&(objectClass=Computer)(whenCreated>" + dateFilter.ToString() + "))"; dsSearch.PageSize = 2000; dsSearch.PropertiesToLoad.Add("distinguishedName"); dsSearch.PropertiesToLoad.Add("whenCreated"); dsSearch.PropertiesToLoad.Add("description"); dsSearch.PropertiesToLoad.Add("operatingSystem"); dsSearch.PropertiesToLoad.Add("name"); //Execute the search SearchResultCollection computersFound = dsSearch.FindAll(); 此代码不返回任何对象,我确信在过去24小时内已创建帐户. GetCompList(DateTime.Now.AddDays(-1)); //This sets the filter to one day previous //Declare new DirectoryEntry and DirectorySearcher DirectoryEntry domainRoot = new DirectoryEntry("LDAP://rootDSE"); string rootOfDomain = domainRoot.Properties["rootDomainNamingContext"].Value.ToString(); DirectorySearcher dsSearch = new DirectorySearcher(rootOfDomain); //Set the properties of the DirectorySearcher dsSearch.Filter = "(&(objectClass=Computer)(whenCreated>=" + dateFilter.ToString("yyyyMMddHHmmss.sZ") + "))"; dsSearch.PageSize = 2000; dsSearch.PropertiesToLoad.Add("distinguishedName"); dsSearch.PropertiesToLoad.Add("whenCreated"); dsSearch.PropertiesToLoad.Add("description"); dsSearch.PropertiesToLoad.Add("operatingSystem"); dsSearch.PropertiesToLoad.Add("name"); //Execute the search SearchResultCollection computersFound = dsSearch.FindAll(); 秘诀是这条线: dsSearch.Filter = "(&(objectClass=Computer)(whenCreated>=" + dateFilter.ToString("yyyyMMddHHmmss.sZ") + "))"; 解决方法
事实证明,答案是在whenCreated过滤器的格式化.根据
This blogpost,whenCreated的过滤器必须格式化为“yyyyMMddHHmmss.sZ”,其中Z是与UTC的偏移量.我所做的是创建了一个名为的方法
private void GetCompList(DateTime dateFilter) //This overloaded version of GetCompList takes a parameter of type DateTime,and only returns computers that were built after dateFilter { try { //Convert the dateFilter to a format appropriate for an LDAP query int offset = -8; //string strDateFilter = convertToCrazyFormat(dateFilter,offset); //string strDateFilter = dateFilter.ToString("yyyyMMddhhmmss"); //Declare new DirectoryEntry and DirectorySearcher DirectoryEntry domainRoot = new DirectoryEntry("LDAP://rootDSE"); string rootOfDomain = domainRoot.Properties["rootDomainNamingContext"].Value.ToString(); DirectorySearcher dsSearch = new DirectorySearcher(rootOfDomain); //Set the properties of the DirectorySearcher dsSearch.Filter = "(&(objectClass=Computer)(whenCreated>=" + dateFilter.ToString("yyyyMMddHHmmss.s" + offset.ToString()) + "))"; dsSearch.PageSize = 2000; dsSearch.PropertiesToLoad.Add("distinguishedName"); dsSearch.PropertiesToLoad.Add("whenCreated"); dsSearch.PropertiesToLoad.Add("description"); dsSearch.PropertiesToLoad.Add("operatingSystem"); dsSearch.PropertiesToLoad.Add("name"); 然后我调用这样的方法: GetCompList(DateTime.Now.AddDays(-1));//Pass in a negative value that represents the time period you want objects from,in this case the last day (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |