我正在处理一个应用程序,作为一个接口,要求提供用户名作为组件(第一,中,最后)。得到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