我正在处理一个应用程序,该应用程序需要将用户的名称作为组件提供(第一个,中间的,最后一个)。
在AD中设置用户时,用户对话框中包含(first,middle,last)文本框,然后将这些文本框组合成显示名称。
我可以使用System.DirectoryServices.AccountManagement通过执行以下操作来检索这些部分:
UserPrincipal userPrinciple = UserPrincipal.Current;
Name.GivenName = userPrinciple.GivenName;
Name.MiddleName = userPrinciple.MiddleName;
Name.FamilyName = userPrinciple.Surname;
现在很遗憾,如果系统与域断开连接,UserPrincipal会抛出异常。在那种情况下,我会回到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用户对话框有一些差异。它似乎缺少提供(第一个,中间的,最后一个)名称的文本框,只有一个全名文本框。
答案 0 :(得分:1)
从Win32_ComputerSystem
,您可以确定计算机是工作站还是成员服务器。获得此信息并且计算机位于Workstation后,您始终可以进行WMI
调用以获取帐户详细信息,否则请调用AD / LDAP对象以获取信息。这只是一段代码,你必须为它提供结构
query = new ObjectQuery(@"Select * from Win32_ComputerSystem");
searcher = new ManagementObjectSearcher(scope, query); searcher.Options.Timeout = new TimeSpan(0, 0, wbemConnectFlagUseMaxWait);
ManagementObjectCollection qWin32_ComputerSystem = searcher.Get();
foreach (ManagementObject item in qWin32_ComputerSystem)
{
windows_domain_role = item["DomainRole"].ToString();
if (windows_domain_role == "0") { windows_domain_role = "Standalone Workstation"; }
if (windows_domain_role == "1") { windows_domain_role = "Workstation"; }
if (windows_domain_role == "2") { windows_domain_role = "Standalone Server"; }
if (windows_domain_role == "3") { windows_domain_role = "Member Server"; }
if (windows_domain_role == "4") { windows_domain_role = "Backup Domain Controller"; }
if (windows_domain_role == "5") { windows_domain_role = "Primary Domain Controller"; }
}
从Win32_UserAccount
获取信息时,请向域查询w.r.t,以便您可以更好地控制信息。
Select * from Win32_UserAccount Where Domain = <machine name>