WMI.NET枚举计算机用户和组

    最近在学习WMI.NET,主要的任务需求是写一个IIS WMI Provider来实现对IIS自动的监控,管理。所以在网上搜寻了很多关于WMI.NET的信息,

今天我们主要来展示一下使用WMI.NET来枚举计算机用户和组。

    涉及到计算机用户和用户组的WMI Class主要有以下四类:

    1. Win32_Account

    2. Win32_UserAccount

      3. Win32_Group

    4. Win32_GroupUser

    为了获取所有用户,你需要执行此查询语句:

select * from Win32_Account where Domain='YOURDOMAIN'

   为了获取所有的用户组,你需要执行此查询语句:

Select * from Win32_GroupUser where Domain='YOURDOMAIN'

   获取所有计算机用户代码如下:

代码
/// <summary>
        
/// 获取所有用户
        
/// </summary>
        public static void GetUsers()
        {
            SelectQuery sQuery 
= new SelectQuery("Win32_UserAccount""Domain='LMY-PC'");
            
try
            {
                ManagementObjectSearcher mSearcher 
= new ManagementObjectSearcher(sQuery);

                Console.WriteLine(
"User Accounts");
                Console.WriteLine(
"");

                
foreach (ManagementObject mObject in mSearcher.Get())
                {
                    Console.WriteLine(mObject[
"Name"]);
                }
            }
            
catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }

获取计算机的所有用户组的代码如下:

代码
 /// <summary>
        
/// 获取所有用户组
        
/// </summary>
        public static void GetGroups()
        {
            SelectQuery sQuery 
= new SelectQuery("Win32_Group""Domain='LMY-PC'");

            
try
            {
                ManagementObjectSearcher mSearcher 
= new ManagementObjectSearcher(sQuery);

                Console.WriteLine(
"User Groups");
                Console.WriteLine(
"");

                
foreach (ManagementObject mObject in mSearcher.Get())
                {
                    Console.WriteLine(mObject[
"Name"]);
                }
            }
            
catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }

获取计算机特定用户组的所有用户的代码如下:

代码
 public static void GetUsers(String DomainName, string GroupName)
        {
            
#region Bulid WMI query using SelectQuery
            StringBuilder sBuilder 
= new StringBuilder("GroupComponent=");
            sBuilder.Append(
'"');
            sBuilder.Append(
"Win32_Group.Domain=");
            sBuilder.Append(
"'");
            sBuilder.Append(DomainName);
            sBuilder.Append(
"'");
            sBuilder.Append(
",Name=");
            sBuilder.Append(
"'");
            sBuilder.Append(GroupName);
            sBuilder.Append(
"'");
            sBuilder.Append(
'"');
            SelectQuery sQuery 
= new SelectQuery("Win32_GroupUser", sBuilder.ToString());
            
#endregion

            
try
            {
                ManagementObjectSearcher mSearcher 
= new ManagementObjectSearcher(sQuery);
                
foreach (ManagementObject mObject in mSearcher.Get())
                {
                    ManagementPath path 
= new ManagementPath(mObject["PartComponent"].ToString());
                    
if (path.ClassName =="Win32_UserAccount")
                    {
                        
string[] names = path.RelativePath.Split(',');
                        Console.WriteLine(names[
1].Substring(names[1].IndexOf("="+ 1).Replace('"'' ').Trim());
                    }
                }
            }
            
catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }
原文地址:https://www.cnblogs.com/limingyang/p/1637404.html