我可以获得“管理员”的成员列表。具有此功能的远程计算机上的组:
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查询以将所有组扩展为用户名的平面列表?