2010-07-01 29 views
10

Je suis à la recherche d'un moyen de créer par programme un groupe d'utilisateurs local. J'ai trouvé beaucoup d'exemples sur la façon d'interroger et d'ajouter des utilisateurs, mais rien que je peux comprendre sur la façon de créer un nouveau groupe.Comment créer un groupe d'utilisateurs local (en C#)

var dirEntry = new DirectoryEntry(
         "WinNT://" + Environment.MachineName + ",computer"); 

/* Code to test if the group already exists */    

if (!found) 
{ 
    DirectoryEntry grp = dirEntry.Children.Add(groupName, "Group"); 
    dirEntry.CommitChanges(); 
} 

C'est ce que je suis arrivé à, mais je sais qu'il est faux que CommitChanges() jette juste un NotImplementedException.

Je me sers de cela comme un échantillon, mais je ne peux même pas faire fonctionner (merci MS):

http://msdn.microsoft.com/en-us/library/ms815734

Quelqu'un a un extrait de code que je peux utiliser pour créer une nouvelle locale groupe?

Répondre

10

Cela fonctionne pour moi:

var ad = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"); 
DirectoryEntry newGroup = ad.Children.Add("TestGroup1", "group"); 
newGroup.Invoke("Put", new object[] { "Description", "Test Group from .NET" }); 
newGroup.CommitChanges(); 

Adapté de this article sur les utilisateurs.

Il semble que vous ayez manqué l'appel "Put" dans votre exemple - Je suppose que c'est la raison pour laquelle vous voyez l'exception NotImplemented.

+0

Oui, c'est exactement ce qui s'est passé. J'ai trouvé un exemple sur l'ajout d'un utilisateur et appelé "Ajouter". Le même code avec "Put" fonctionne maintenant. Merci! –

+0

Pas assez de points pour voter, mais j'ai accepté votre réponse. Merci encore. –

+0

@ the-diamond-z - merci! Je me suis rendu compte que je n'avais pas voté pour votre question, alors je l'ai juste fait. Bienvenue sur Stack Overflow! –

6

Vous pouvez essayer ce qui suit (ont pas essayé moi-même):

PrincipalContext context = new PrincipalContext(ContextType.Machine); 
GroupPrincipal group = new GroupPrincipal(context); 
group.Name = model.Name; 
group.Save(); 

Il utilise System.DirectoryServices.AccountManagement.

+4

Pourquoi publier une réponse sans même l'essayer? C'est juste le bruit de la ligne qui mène à des chasses aux oies sauvages. –

+2

Pour être juste, cela fonctionne ... – Doogal

+0

Vous pouvez également passer le nom du groupe dans le constructeur comme suit: GroupPrincipal group = new GroupPrincipal (context, "MyLocalGroup") –