2010-07-01 15 views
10

Ich bin auf der Suche nach einer Möglichkeit zum programmgesteuerten Erstellen einer lokalen Benutzergruppe. Ich habe viele Beispiele gefunden, wie ich Benutzer abfragen und hinzufügen kann, aber ich kann nichts darüber verstehen, wie man eine neue Gruppe erstellt.So erstellen Sie eine lokale Benutzergruppe (in 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(); 
} 

Dies ist, was ich angekommen sind, aber ich weiß, dass es falsch ist, als CommitChanges() nur NotImplementedException wirft.

Ich habe mit dieser als eine Probe, aber ich kann es nicht einmal die Arbeit an (dank MS):

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

Jeder, der einen Code-Schnipsel haben kann ich eine neue lokale erstellen Gruppe?

Antwort

10

Dies funktioniert für mich:

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

von this Artikel auf Benutzer angepasst.

Es sieht aus wie Sie die Invoke "Put" in Ihrem Beispiel verpasst haben - ich denke, das ist der Grund, warum Sie die NotImplementedException sehen.

+0

Ja, genau das ist passiert. Ich habe ein Beispiel für das Hinzufügen eines Benutzers gefunden, das "Add" heißt. Derselbe Code mit "Put" funktioniert jetzt. Vielen Dank! –

+0

Nicht genug Punkte zum Wählen, aber ich habe deine Antwort akzeptiert. Danke nochmal. –

+0

@ the-diamond-z - danke! Ich habe bemerkt, dass ich deine Frage nicht aufgefrischt habe, also habe ich es einfach getan. Willkommen bei Stack Overflow! –

6

Sie können versuchen, die folgenden (habe es selbst nicht ausprobiert):

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

Dies verwendet System.DirectoryServices.AccountManagement.

+4

Warum würden Sie eine Antwort posten, ohne es zu versuchen? Es ist nur Line-Noise, die zu wilden Gans Chases führt. –

+2

Um fair zu sein, es funktioniert ... – Doogal

+0

Sie können auch den Gruppennamen im Konstruktor übergeben, wie in: GroupPrincipal Gruppe = neue GroupPrincipal (Kontext, "MyLocalGroup") –

Verwandte Themen