1

i try to display all groups a special User is in. I also know, that i could do it like this:

 public static List<Principal> getUsers(){
     PrincipalContext context = new PrincipalContext(ContextType.Machine, "computername");
        PrincipalSearcher search = new PrincipalSearcher(new UserPrincipal(context));
        return search.FindAll().ToList();

    }

But i want to work arount PrincipalContext because i need to Use this remotely on a PC, wich is in no Domain. So i tried this:

 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();
    }

It gives me an Exception because the query isn´t correct.

Thanks alot for any kind of help.

4

2 に答える 2

1

@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(); 
    }
}

もちろん、これはジェット (GUI 進行中) ではありませんが、今のところ必要なすべてを実行します。

テストしたい場合は、コードを実行するユーザーと同じユーザー名とパスワードを持つリモート PC でローカル ユーザーを作成する必要があります (このユーザーには管理者権限が必要です)。

于 2014-07-24T06:50:08.897 に答える
0

LocalAccount.Name代わりに単純に使用Nameして削除するだけのフィールドはありません\。したがって、次のようになります。

public static void findUsers()
{
    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Group WHERE Name = 'Guests'");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    var result = searcher.Get();
     foreach (var envVar in result)
    {
        Console.WriteLine("GroupName: {0}", envVar["Name"]);
    }
    Console.ReadLine();
}
于 2014-07-23T12:04:45.790 に答える