以下是我的代码:
DirectorySearcher search = new DirectorySearcher( directory );
search.Filter = "(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(|(sn=*)))";
search.PropertiesToLoad.Add( "GivenName" );
search.PropertiesToLoad.Add( "OfficePhone" );
search.PropertiesToLoad.Add( "EmployeeNumber" );
SearchResultCollection results = search.FindAll();
int thisCount = results.Count;
string filePath = "C:\\test.csv";
string contents = string.Empty;
int counter = 0;
foreach( SearchResult result in results ) {
DirectoryEntry userEntry = result.GetDirectoryEntry();
string givenName = userEntry.Properties[ "userPrincipalName" ].Value.ToString();
string employeeNumber = userEntry.Properties[ "EmployeeNumber" ].Value.ToString();
string phoneNumber = userEntry.Properties[ "OfficePhone" ].Value.ToString();
counter = counter + 1;
}
System.IO.File.WriteAllText( filePath, contents );
我似乎无法解决的问题是,当我开始循环浏览“结果”对象时,代码会在givenName
被分配后爆炸。我得到的错误是:
对象引用未设置为对象的实例。
我试图弄清楚如何正确分配它,但我一直在与它碰壁。任何建议将不胜感激。我很确定它与我没有正确理解DirectorySearcher / DirectoryEntry有关 - 但我可能是错的。 : - )
答案 0 :(得分:1)
基于此声明:
在givenName被分配后,代码会爆炸......
这行代码:
userEntry.Properties[ "EmployeeNumber" ]
正在爆炸,并且让您知道EmployeeNumber
的Value
EmployeeNumber
null
为userEntry.Properties[ "EmployeeNumber" ] as string;
。我打赌第二个,所以改变这一行:
employeeNumber
,null
字段将null
设置为{{1}},但不会引发异常。
答案 1 :(得分:1)
userEntry.Properties[ "EmployeeNumber" ].Value as string;
工作