获取Windows计算机上的用户列表?

时间:2018-08-14 07:36:06

标签: c# .net-core

我试图返回,或者在此示例中,打印出在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());
}

1 个答案:

答案 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);
}