报告AD用户对象属性,用于从未login的帐户

我已经在C#中编写了一个实用程序来报告访问pipe理过程中使用的AD帐户详细信息。 我注意到某些属性的值不包括在从未login的帐户的报告中,因此userAccountControl尚未初始化。

有没有一种方式来编程报告这些值从未login的帐户,使用C#?

例如,我们所有的账户都具有employeeType属性,并且在每个账户上,employeeType被设置为在账户资料的“属性编辑器”选项卡的AD Explorer中可见的“承包商”或“永久”值。 如果帐户已经login到我的报告中,但是如果没有,那么employeeType不会显示在该帐户的结果中。

以下是我的代码示例:

public static List<ADObjects> getADUserObjects(string domainShortNameStr) { List<ADObjects> adUserObjectsList = new List<ADObjects>(); DirectoryEntry searchRoot = ADUtils.getSingleDomainDirectoryEntry(domainShortNameStr); string searchFilter = "(sAMAccountType=805306368)"; string[] adAttributeNamesStrArr = new string[] { "distinguishedName", "sAMAccountName", "userAccountControl", "employeeType" }; DirectorySearcher search = new DirectorySearcher(searchRoot, searchFilter, adAttributeNamesStrArr); search.PageSize = 1000; SearchResult result; SearchResultCollection resultCol = search.FindAll(); if (resultCol != null) { for (int counter = 0; counter < resultCol.Count; counter++) { result = resultCol[counter]; ADObjects tempAdUserObject = new ADObjects(); tempAdUserObject.DistinguishedName = (result.Properties.Contains("distinguishedName")) ? ((String)result.Properties["distinguishedName"][0]) : null; tempAdUserObject.SAMAccountName = (result.Properties.Contains("samaccountname")) ? (String)result.Properties["samaccountname"][0] : null; tempAdUserObject.UserAccountControl = (result.Properties.Contains("userAccountControl")) ? result.Properties["userAccountControl"][0].ToString() : null; tempAdUserObject.EmployeeType = (result.Properties.Contains("employeeType")) ? (String)result.Properties["employeeType"][0] : null; adUserObjectsList.Add(tempAdUserObject); } } ... return adUserObjectsList; } 

我曾尝试使用CSVDE,LDIFDE,DSQUERY,Powershell和VBScript运行类似的报告,同样的事情发生:雇员types不会返回从未login的帐户。

所有报告都在我自己的域帐户和为此创build的只读服务帐户下运行,产生相同的结果。

如果该属性在第一次login之前没有在LDAP条目中设置,那么没有LDAP查询将返回它。 这是LDAP协议的工作方式:

如果在条目中没有设置属性,即使被请求,结果中也不会是空的,但是根本不会有属性。

您必须在input处理中testing,如果条目属性“EmployeeType”不存在,则设置您希望显示在报告中的默认值