2014-09-22 31 views
0

下面的代码返回机器上组和关联成员的列表。为什么它只返回人口稠密的群体。例如,在你的机器上创建一个新的用户组,它不会在这个查询中返回。但是,如果您将用户添加到用户组,它将在查询中返回。是否有修复查询?查询仅返回具有用户的组

C#代码

var sGroupName = ""; 
var sUsername = ""; 
ManagementObjectSearcher searchresult = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_GroupUser"); 


foreach (ManagementObject queryObj in searchresult.Get()) 
{ 
     sGroupName = queryObj["GroupComponent"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
     sUsername = queryObj["PartComponent"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
} 
+2

虽然我不是这个命名空间经历,它会发生,我认为从“GroupUser”表中选择将只是那 - 用户。最有可能的是一个“组”表,它们自己拥有这些组。 – DanS 2014-09-22 20:01:46

回答

1

试试这个:

var searchResult = 
    new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Group"); 
+0

只返回组名称。我正在查找返回组和关联成员的WMI查询,包括空的组。 “包含空的组”不会被返回。 – user1438082 2014-09-22 20:12:28

+1

@ user1438082因此,最简单的方法是使用Win32_Group表选择所有组,然后对于每个组,使用WHERE子句从Win32_GroupUser表中选择任何用户以仅匹配组中的那些用户。实施取决于你,但这个过程会给你你似乎在寻找的东西。 – DanS 2014-09-22 20:28:40

+0

是的 - 但我希望能够对现有查询进行简单的修改,以获取我需要的数据。 – user1438082 2014-09-22 20:29:56