2010-07-01 22 views
10

Estoy buscando una manera de cómo crear programáticamente un grupo de usuarios local. Encontré muchos ejemplos sobre cómo consultar y agregar usuarios, pero no puedo entender nada sobre cómo crear un nuevo grupo.Cómo crear un grupo de usuarios 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(); 
} 

Esto es lo que he llegado a pero sé que está mal como CommitChanges() simplemente arroja un NotImplementedException.

He estado usando esto como una muestra, sino que ni siquiera puedo conseguir que funcione (gracias MS):

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

Alguien tiene un fragmento de código que puede utilizar para crear un nuevo local, ¿grupo?

Respuesta

10

Esto funciona para mí:

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(); 

Adaptado de this artículo sobre los usuarios.

Parece que se olvidó de la invocación "Poner" en su ejemplo - Supongo que es por eso que está viendo la excepción NotImplementedException.

+0

Sí, eso es exactamente lo que sucedió. Encontré un ejemplo al agregar un usuario y llamado "Agregar". El mismo código con "Put" funciona ahora. ¡Gracias! –

+0

No hay suficientes puntos para votar, pero acepté su respuesta. Gracias de nuevo. –

+0

@ the-diamond-z - gracias! Me di cuenta de que no había votado tu pregunta, así que simplemente lo hice. Bienvenido a Stack Overflow! –

6

Puede intentar lo siguiente (no se han probado a mí mismo):

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

Este utiliza System.DirectoryServices.AccountManagement.

+4

¿Por qué publicaría una respuesta sin siquiera intentarlo? Es solo ruido de línea que conduce a persecuciones de ganso salvaje. –

+2

Para ser justos, funciona ... – Doogal

+0

También puede pasar el nombre del grupo en el constructor como en: GroupPrincipal group = new GroupPrincipal (context, "MyLocalGroup") –

Cuestiones relacionadas