首先,請,如果我沒有使用正確的術語原諒我。糾正我無論我使用錯誤的術語。搜索多個域服務器的用戶lastLogon屬性全部
目標是編程方式檢索一個給定用戶名的lastLogon
日期。
我們有什麼,我相信這是一個森林;兩個AD服務器 - adserver01.aa.mycompany.com
和adserver02.aa.mycompany.com
我使用Microsoft的ADExplorer從第三臺機器連接到這些服務器以檢查對象。在那裏,我看到一些用戶在adserver01
中有LastLogon日期,但不在adserver02
中。例如,對於某些用戶,lastLogon的值在adserver02
中爲0x0,而在adserver01
中爲有效日期。
我到目前爲止已經爲Windows窗體應用程序開發的代碼,如果只有一個AD服務器參與工作正常。如何檢查兩臺服務器併爲lastLogon日期屬性返回非零值(如果可用)?
private static string GetLastActivityDate(string UserName)
{
string domainAndUserName = String.Format(@"LDAP://aa.mycompany.com/CN={0},OU=CLIENT_PROD,OU=clients.mycompany.com,DC=aa,DC=mycompany,DC=com", UserName);
string OUAdminUserName = "abc";
string OUAdminPassword = "xyz";
AuthenticationTypes at = AuthenticationTypes.Secure;
DateTime lastActivityDate;
string returnvalue;
long lastLogonDateAsLong;
using (DirectoryEntry entryUser = new DirectoryEntry(domainAndUserName, OUAdminUserName, OUAdminPassword, at))
using (DirectorySearcher mysearcher = new DirectorySearcher(entryUser))
try
{
using (SearchResultCollection results = mysearcher.FindAll())
{
if (results.Count >= 1)
{
DirectoryEntry de = results[0].GetDirectoryEntry();
lastLogonDateAsLong = GetInt64(de, "lastLogon");
try
{
if (lastLogonDateAsLong != -1)
{
lastActivityDate = DateTime.FromFileTime(lastLogonDateAsLong);
returnvalue = lastActivityDate.ToString();
}
else
{
returnvalue = "-Not available-";
}
}
catch (System.ArgumentOutOfRangeException aore)
{
returnvalue = "Not available";
}
}
else
{
returnvalue = string.Empty;
}
}
}
catch (System.DirectoryServices.DirectoryServicesCOMException dsce)
{
returnvalue = "- Not available -";
}
return returnvalue;
}
謝謝。
編輯:
private static Int64 GetInt64(DirectoryEntry entry, string attr)
{
DirectorySearcher ds = new DirectorySearcher(
entry,
String.Format("({0}=*)", attr),
new string[] { attr },
SearchScope.Base
);
SearchResult sr = ds.FindOne();
if (sr != null)
{
if (sr.Properties.Contains(attr))
{
return (Int64)sr.Properties[attr][0];
}
}
return -1;
}
忘記提到,AD模式,結構等,看起來完全相同的兩個服務器。
如果它工作正常,一個..then替換從域或URL解析,你要麼從config文件讀取或可傳遞變量/硬編碼的LDAP連接刺痛..或基本具備列表並傳遞列表對象到您的帕拉姆的方法和在for循環內就可以完成同樣的事情有一些小的硬編碼值更改參數 –
MethodMan