2

Je réalise une application C# ciblant WinXP, Vista et 7 systèmes d'exploitation.Ajouter par programme un utilisateur local à un groupe local

Une fonctionnalité est, je peux ajouter, supprimer, modifier l'ensemble du groupe à un utilisateur par programmation. Puis-je demander de l'aide pour que cela se produise?

Sera-t-il possible de le faire dans WMI? Mes codes principalement à l'aide de WMI pour obtenir les utilisateurs ..


suis actuellement en utilisant Windows7

Je suis en train de tester ce code

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

et il est crachant cette erreur

La propriété de répertoire est introuvable dans le cache.

J'ai essayé la collection énumérer la propriété et j'ai eu cette

OperatingSystem 

OperatingSystemVersion 

Owner 

Division 

ProcessorCount 

Processor 

Name 

Répondre

2

Si vous utilisez des groupes locaux, vous pouvez le faire en appelant le système commande net. Par exemple, pour ajouter un utilisateur à un groupe, vous appelleriez:

net localgroup MyGroup /add SomeUser 

type net help localgroup à une invite de commande pour plus d'informations.

Vous pouvez également le faire en utilisant WMI. Ceci est VBScript, mais peut être adapté à outils .NET ou votre programmation préférée:

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 

Crédit: Matt Hickman, http://www.tech-archive.net/Archive/WinXP/microsoft.public.windowsxp.wmi/2004-04/0007.html

+0

OUI S'IL VOUS PLAÎT WMI !! – jaysonragasa

+0

L'ajout d'un utilisateur à un groupe est-il possible dans WMI? Y a-t-il une requête de mise à jour? : D – jaysonragasa

+0

Je voudrais aller avec les commandes net. WMI se casse souvent et est lent. Pas sûr de la vitesse des commandes NET, mais au pire, il serait plus fiable. –

0

J'ai aussi développé une application Windows sur Visual Studio 2010, en utilisant C#. Ceci est une version de travail du programme, qui va ajouter un utilisateur existant à un groupe particulier.

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