2011-01-25 25 views
1

這是我取回我的本地計算機信息代碼:WMI檢索用戶所屬的組?

 ManagementObjectSearcher Usersearcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"); 
     ManagementObjectCollection Usercollection = Usersearcher.Get(); 
     string[] sep = { "\\" }; 
     string[] UserName = Usercollection.Cast<ManagementBaseObject>().First()["UserName"].ToString().Split(sep, StringSplitOptions.None); 

     ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_UserAccount where Domain = 'MyDomain' and Name= '" + UserName[1] + "'"); 
     ManagementObjectCollection collection = searcher.Get(); 
     WriteOnListBox("UserName: " + (string)collection.Cast<ManagementBaseObject>().First()["Name"]); 
     WriteOnListBox("Full Name: " + (string)collection.Cast<ManagementBaseObject>().First()["FullName"]); 
     WriteOnListBox("Description: " + (string)collection.Cast<ManagementBaseObject>().First()["Description"]); 

但我我不能找回我在這些團體和電子郵件。

回答

3

在做這個工作,我解決了它,我會回答我的問題了幾個小時後,

private string GetGroupsForUser(string UserName) 
    { 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_GroupUser where PartComponent=\"Win32_UserAccount.Domain='MyDomain',Name='" + UserName + "'\""); 
     StringBuilder strGroups = new StringBuilder(); 

     foreach (ManagementObject mObject in searcher.Get()) 
     { 
      ManagementPath path = new ManagementPath(mObject["GroupComponent"].ToString()); 

      if (path.ClassName == "Win32_Group") 
      { 
       String[] names = path.RelativePath.Split(','); 
       strGroups.Append(names[1].Substring(names[1].IndexOf("=") + 1).Replace('"', ' ').Trim() + ", "); 
      } 
     } 
     return strGroups.ToString(); 
    }