2

我正在做一個針對WinXP,Vista和7操作系統的C#應用​​程序。以編程方式將本地用戶添加到本地組

一個功能是,我可以以編程方式添加,刪除,修改組設置爲用戶。

我可以尋求幫助嗎?

在WMI中可以做到這一點嗎?我的代碼主要是利用WMI來獲取用戶..


目前正在使用的Windows7

我想測試此代碼

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName + ",Computer"); 
localMachine.Properties["member"].Add("Chevi"); 
localMachine.CommitChanges(); 
localMachine.Close(); 

,它的隨地吐痰這個錯誤

在緩存中找不到目錄屬性。

我試圖枚舉屬性集合,我通過調用系統命令net得到這個

OperatingSystem 

OperatingSystemVersion 

Owner 

Division 

ProcessorCount 

Processor 

Name 

回答

2

如果您使用本地組,你可以做到這一點。例如,將用戶添加到組,你會打電話來:在命令提示符下

net localgroup MyGroup /add SomeUser 

類型net help localgroup獲取更多信息。

您也可以使用WMI來做到這一點。這是VBScript中,但可以適應.NET或您的首選編程工具包:

Dim oComputer 
Computer = "computername" 
Groupname = "Administrators" 
ObjectToAdd = "Administrator" 

' Bind to the computer. 
Set oComputer = GetObject("WinNT://" & Computer & ",computer") 

' get group object 
Dim oGroup 
Set oGroup = oComputer.GetObject("group", GroupName) 

' Add the user object to the group. 
oGroup.Add "WinNT://" & Computer & "/" & ObjectToAdd 

來源:馬特·希克曼,http://www.tech-archive.net/Archive/WinXP/microsoft.public.windowsxp.wmi/2004-04/0007.html

+0

YES請WMI !! – jaysonragasa 2010-03-06 02:55:03

+0

是否將用戶添加到WMI中可能的組? 有沒有像更新查詢? :D – jaysonragasa 2010-03-06 02:56:54

+0

我會去網絡命令。 WMI經常打破,速度很慢。不知道NET命令的速度,但最糟糕的是它會更可靠。 – 2013-05-20 14:38:41

0

我還制定了Visual Studio 2010的一個Windows應用程序,使用C#。這是該程序的一個工作版本,它將爲現有用戶添加一個特定的組。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.DirectoryServices; 

namespace Utility_Add_User_To_Group { 

    public partial class Form1 : Form { 

     public Form1() { 
      InitializeComponent(); 
     } 

     private void btn_Add_Click(object sender, EventArgs e) { 
      string usr, grp; 
      usr = txt_UserName.Text; 
      grp = txt_GroupName.Text; 

      add(usr, grp); 
      groupBox2.Visible=true; 
     } 

     private void add(string usr, string grp) { 
      bool flagUsr, flagGrp; 
      try { 
       DirectoryEntry AD = new DirectoryEntry("WinNT://" +Environment.MachineName + ",computer"); 
       DirectoryEntry group, user; 

       group = AD.Children.Find(grp, "group"); 
       user = AD.Children.Find(usr, "user"); 
       if (user != null) { 
        label3.Text += "User Name Exists!!!"; 
        flagUsr = true; 
       } else { 
        label3.Text += "Sorry, No Such User Name Found!!!"; 
        flagUsr = false; 
       } 

       if (group != null) { 
        label4.Text += "Group Exists!!!"; 
        flagGrp = true; 
       } else { 
        label4.Text += "Sorry, Group Does Not Exists!!!"; 
        flagGrp= false; 
       } 

       if(flagGrp == true && flagUsr == true) { 
        group.Invoke("Add", new object[] { user.Path.ToString() }); 
        label5.Text += "Congratulations!!! User has been added to the group"; 
       } else { 
        label5.Text += "Error Happened!!! User could not be added to the group!!!"; 
       } 
      } catch (Exception e) { 
       label6.Text +=e.Message.ToString(); 
       label6.Visible= true; 
      } 
      } 

     private void btn_Clear_Click(object sender, EventArgs e) { 
      normal(); 
     } 
     private void normal() { 
      txt_GroupName.Text=""; 
      txt_UserName.Text=""; 
      txt_UserName.Focus(); 

      groupBox2.Visible=false; 
     } 
     } 
    } 
相關問題