我正在處理一個應用程序,作爲一個接口,要求提供用戶名作爲組件(第一,中,最後)。得到Windows用戶的名字和姓氏
在AD中設置用戶時,用戶對話框具有文本框(第一,中間,最後),然後將它們組合到顯示名稱中。如果系統從域中斷開
UserPrincipal userPrinciple = UserPrincipal.Current;
Name.GivenName = userPrinciple.GivenName;
Name.MiddleName = userPrinciple.MiddleName;
Name.FamilyName = userPrinciple.Surname;
現在不幸的是,UserPrincipal拋出一個異常:
我可以做類似下面的檢索使用System.DirectoryServices.AccountManagement這些部件。在這種情況下,我會回到GetUserNameEx。
[DllImport("secur32.dll", CharSet = CharSet.Auto)]
public static extern bool GetUserNameEx(int nameFormat, StringBuilder userName, ref uint userNameSize);
StringBuilder fullname = new StringBuilder(1024);
uint size = (uint)fullname.Capacity;
GetUserNameEx(3, fullname, ref size)
在這裏,我留下來爲自己照顧,打破它的組成部分的全名。有沒有人知道當系統從域中斷開時獲取組件的方法?
同樣,如果系統不是一個域的一部分,並且正在使用本地帳戶,我會使用WMI。
string UserName = Environment.UserName;
string query = "SELECT * FROM Win32_UserAccount Where Name=\"" + UserName + "\"";
ManagementScope mgmtScope = new ManagementScope("\\\\.\\Root\\CIMv2");
ObjectQuery oQuery = new ObjectQuery(query);
ManagementObjectSearcher mgmtSearch = new ManagementObjectSearcher(mgmtScope, oQuery);
ManagementObjectCollection objCollection = mgmtSearch.Get();
foreach (ManagementObject mgmtObject in objCollection)
{
fullName = (string)mgmtObject["FullName"];
}
我再次留下來打破我自己的名字。有沒有人知道當系統在使用本地帳戶的工作組中時獲取組件的方法?
當我查看本地用戶管理對話框時,它看起來與AD用戶對話框有一些不同。它似乎缺少用於提供(第一,中間,最後)名稱的文本框,並且只有全名文本框。
感謝提示確定系統是否在域中。非常有用,但沒有解決問題。 +1 – denver
然後我沒有正確理解這個問題。當你說與域名斷開連接時,這意味着什麼?它從來不是域的一部分,或者它是域的一部分。 如果它不是域的一部分,則只剩下一個選項,即WMI。我試圖給出這個答案。 –
問題在於如何獲取名字和姓氏。 UserPrincipal在您處於域並連接時提供給您。其他方法只提供顯示名稱。 – denver