使用WMI

时间:2016-05-16 19:22:27

标签: c# wmi wmi-query

我可以获得“管理员”的成员列表。具有此功能的远程计算机上的组:

public IEnumerable<string> GroupMembers(string groupname)
{
    var result = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase);
    try
    {
        var qs = new StringBuilder();
        qs.Append("SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = \"Win32_Group.Domain='");
        qs.Append(_machineName);
        qs.Append("',Name='");
        qs.Append(groupname);
        qs.AppendLine("'\"");
        var query = new ObjectQuery(qs.ToString()); // SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = "Win32_Group.Domain='MYMACHINENAME',Name='Administrators'"
        var searcher = new ManagementObjectSearcher(_scope, query);
        var queryCollection = searcher.Get();

        foreach (var m in queryCollection)
        {
            var path = new ManagementPath(m["PartComponent"].ToString());
            {
                var names = path.RelativePath.Split(',');
                result.Add(names[0].Substring(names[0].IndexOf("=") + 1).Replace("\"", " ").Trim() + "\\" + // Win32_UserAccount.Domain=xxxxxx 
                           names[1].Substring(names[1].IndexOf("=") + 1).Replace("\"", " ").Trim()); // Name=xxxxx

            }
        }
        return result;  // MYMACHINENAME\Administrator,MYDOMAIN\Domain Admins,MYDOMAIN\Dev Service Accounts
    }
    catch (Exception e)
    {
        _logger.Error("Message: " + e.Message);
        throw;
    }            
}

但是,这不会扩展返回的组列出所有单个成员。这实际上与net localgroup Administrators相同。

在我的示例中,我正在查看MYDOMAIN\Dev Service Accounts的其中一位成员是否为管理员。

如何调整WMI查询以将所有组扩展为用户名的平面列表?

0 个答案:

没有答案