1

я стараюсь, чтобы отобразить все группы специальный пользователь находится в Я также знаю, что я мог бы сделать это следующим образом:.Как я могу получить все группы локального пользователя с помощью ObjectQuery?

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

    } 

Но я хочу работать arount PrincipalContext, потому что мне нужно использовать это удаленно на ПК, в котором нет домена. Поэтому я пробовал это:

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

Это дает мне исключение, потому что запрос не правильный.

Большое спасибо за любую помощь.

+0

Try удалив '\\' в вашем запросе. – Edper

+0

Эй, спасибо за этот совет, но я попробовал несколько видов форматов. Не работает для меня. – Jirayia

ответ

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

, конечно, это не сделано jet (GUI в процессе), но он делает все, что я хочу сейчас.

, если вы хотите, чтобы проверить это необходимо сделать локальный пользователь на удаленном компьютере, который получил такое же имя пользователя и пароль в качестве пользователя у запустить код с. (И этим пользователем нуждается права администратора)

+0

Нет проблем @Jirayia. Хорошо, что вы его работали. Держите кодирование, и Бог благословит. – Edper

0

Там нет LocalAccount.Name поля вместо этого просто использовать просто Name и удалить также \, так что она будет выглядеть следующим образом: (я использовал «гость», как мой пример не «Test»

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

Привет, Спасибо за ваш ответ. Нужно ли мне добавлять какие-либо ссылки для этого? Я спрашиваю, потому что мой запрос не имеет метода Where(). – Jirayia

+0

'System.Data.Entity' для справки и' System.Data.Objects' для пространства имен. – Edper

+0

Хорошо, спасибо большое. Теперь у меня есть проблема, что у меня есть несколько ссылок на ObjectQuery. Я использую пакет System.Management для области управления. Итак, теперь мой ObjectQuery может быть System.Management.ObjectQuery или System.Data.Objects.ObjectQuery. PS: извините, если это какие-то немые вопросы. Я не очень опытный разработчик: S (только стажер ^^) – Jirayia