我试图返回,或者在此示例中,打印出在Windows计算机上创建的每个用户,我并不真正在乎Windows用户,例如“ defaultuser0”,但是如果有人可以告诉我我可以将它们也排除在外,那很好,但是回到主要问题。
我在下面有此代码,并且在一定程度上有效。我收到的输出是这个。
\ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ PC_NAME”,Name =“ admin” \ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ PC_NAME”,Name =“ Administrator” \ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ PC_NAME”,Name =“ DefaultAccount” \ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ PC_NAME”,Name =“ defaultuser0” \ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ PC_NAME”,Name =“ Guest” \ PC_NAME \ root \ cimv2:Win32_UserAccount.Domain =“ HEAVEN”,Name =“ WDAGUtilityAccount”
现在,我知道这是我代码的自然行为。有没有一种方法可以获取实际的用户名,而无需包括域和所有其他目录代码?
这是我正在使用的代码。
var searcher = new ManagementObjectSearcher(new SelectQuery("Win32_UserAccount"));
foreach (var managementBaseObject in searcher.Get())
{
Console.WriteLine(((ManagementObject) managementBaseObject).ToString());
}
答案 0 :(得分:1)
您可以指定只希望集合中的所有ManagementBaseObject
实例,而不是让编译器选择基本类型ManagementObject
。
foreach (ManagementObject instance in searcher.Get())
这样,您无需再次明确地进行投射。
要访问此类ManagementObject
的任何属性,请使用[string]访问符号。字符串必须是属性名称,在您的情况下为Name
。
Console.WriteLine("Username: {0}", instance["Name"]);
完整代码为:
var searcher = new ManagementObjectSearcher(new SelectQuery("Win32_UserAccount"));
foreach (ManagementObject instance in searcher.Get())
{
var strUsername = instance["Name"];
Console.WriteLine("Username: {0}", strUsername);
}