我尝试显示一个特殊用户所在的所有组。我也知道,我可以这样做:
public static List<Principal> getUsers(){
PrincipalContext context = new PrincipalContext(ContextType.Machine, "computername");
PrincipalSearcher search = new PrincipalSearcher(new UserPrincipal(context));
return search.FindAll().ToList();
}
但是我想在PrincipalContext周围工作,因为我需要在PC上远程使用它,而该域没有域。所以我尝试了这个:
public static void findUsers()
{
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Group WHERE LocalAccount.Name =\'Test'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
var result = searcher.Get();
foreach (var envVar in result)
{
Console.WriteLine("GroupName: {0}", envVar["Name"]);
}
Console.ReadLine();
}
它给了我一个异常,因为查询不正确。
非常感谢您的任何帮助。
@Edper您的提示非常好,但是我使用了另一种方法来解决我的问题。
任务是只输入远程服务器的用户名和IP,然后获取该本地用户所在的所有组。
class Program
{
static ManagementScope scope =
new ManagementScope(
"\\\\ServerIP\\root\\cimv2");
static string username = "Test";
static void Main(string[] args)
{
string partComponent = "Win32_UserAccount.Domain='Domain',Name='"+username+"'";
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_GroupUser WHERE PartComponent = \"" + partComponent + "\"");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
var result = searcher.Get();
foreach (var envVar in result)
{
ManagementObject groupComponent = new ManagementObject("\\\\ServerIP\\root\\cimv2", envVar["GroupComponent"].ToString(), null);
Console.WriteLine(groupComponent["Name"]);
}
}
Console.ReadLine();
}
}
当然,这还没有完成jet(GUI正在进行中),但是现在我已经做了。
如果要测试它,则需要在远程PC上创建一个本地用户,该本地用户具有与运行该代码的用户相同的用户名和密码(并且该用户需要管理员权限)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句