davidg は正しい方向に進んでおり、私は彼の答えを信じています。
しかし、必要な WMI クエリは単純ではありませんでした。マシン全体のユーザーのリストだけでなく、ローカルかドメインかに関係なく、ローカルの Administrators グループのメンバーであるユーザーとグループのサブセットが必要だったからです。記録として、その WMI クエリは次のとおりです。
SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = "Win32_Group.Domain='thehostname',Name='thegroupname'"
完全なコード スニペットは次のとおりです。
public string GroupMembers(string targethost, string groupname, string targetusername, string targetpassword)
{
StringBuilder result = new StringBuilder();
try
{
ConnectionOptions Conn = new ConnectionOptions();
if (targethost != Environment.MachineName) //WMI errors if creds given for localhost
{
Conn.Username = targetusername; //can be null
Conn.Password = targetpassword; //can be null
}
Conn.Timeout = TimeSpan.FromSeconds(2);
ManagementScope scope = new ManagementScope("\\\\" + targethost + "\\root\\cimv2", Conn);
scope.Connect();
StringBuilder qs = new StringBuilder();
qs.Append("SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = \"Win32_Group.Domain='");
qs.Append(targethost);
qs.Append("',Name='");
qs.Append(groupname);
qs.AppendLine("'\"");
ObjectQuery query = new ObjectQuery(qs.ToString());
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();
foreach (ManagementObject m in queryCollection)
{
ManagementPath path = new ManagementPath(m["PartComponent"].ToString());
{
String[] names = path.RelativePath.Split(',');
result.Append(names[0].Substring(names[0].IndexOf("=") + 1).Replace("\"", " ").Trim() + "\\");
result.AppendLine(names[1].Substring(names[1].IndexOf("=") + 1).Replace("\"", " ").Trim());
}
}
return result.ToString();
}
catch (Exception e)
{
Console.WriteLine("Error. Message: " + e.Message);
return "fail";
}
}
したがって、Groupmembers("Server1", "Administrators", "myusername", "mypassword"); を呼び出すと、次のように単一の文字列が返されます。
SERVER1\Administrator
MYDOMAIN\Domain Admins
実際の WMI の戻り値は次のようになります。
\\SERVER1\root\cimv2:Win32_UserAccount.Domain="SERVER1",Name="管理者"
...ご覧のとおり、文字列を少し操作してきれいにする必要がありました。