1

因此,我 WMI 查询远程计算机以获取其Administrators组的成员:

SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = "Win32_Group.Domain='MACHINE_NAME',Name='Administrators'"

它将PartComponent属性作为字符串返回。这是列表(为安全起见更改了名称)。域用户joeblowjanedoe并且确实是该机器中的本地管理员。

\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="MACHINE_NAME",Name="localadmin"
\\MACHINE_NAME\root\cimv2:Win32_Group.Domain="OUR_DOMAIN",Name="Domain Admins"
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="joeblow"
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="janedoe"

我在一个循环中遍历上述结果。在其中,我执行以下操作:

ManagementObject isInThisUser = new ManagementObject(memberString);

我这样做是为了从每个成员对象中提取 Domain 和 Name 属性。在一个完美的世界中,我将获得以下字符串列表作为最终结果:

\\MACHINE_NAME\localadmin
\\OUR_DOMAIN\Domain Admins
\\OUR_DOMAIN\joeblow
\\OUR_DOMAIN\janedoe

但这就是发生的事情:ManagementObject使用该构造函数创建的对象是的!域,名称,标题,一切,所有null!除了第一个(本地管理员)。对于那个,构造函数像宣传的那样工作。

为什么会这样?是因为进行查询的用户不是域管理员吗?(不过,它目标机器上的本地管理员。实际上,它是OUR_DOMAIN\janedoe。)

4

1 回答 1

0

好吧,这对我有用:从关联 Win32_GroupUser 中选择 PartComponent 后,我​​做

string path = obj.Properties["PartComponent"].Value.ToString();
ManagementObject mo=new ManagementObject(path);

mo 包含所有填充的属性。你如何填充 memberString 变量?

于 2010-10-24T16:55:33.540 回答