views:

39

answers:

2

I'm looking to programatically create a Local User Group. I found plenty of examples on how to query and add users but nothing I can understand about how to create a new group.

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

This is what I've arrived at but I know it's wrong as CommitChanges() just throws a Not implemented exception.

I've been using this as a sample but I can't even get it to work (thanks MS) http://msdn.microsoft.com/en-us/library/ms815734

Anyone have a code snippet I can use to create a new local group?

+2  A: 

This works for me:

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

Adapted from this article on users.

It looks like you missed the Invoke "Put" in your example - I guess this is why you are seeing the NotImplementedException.

Rob Levine
Yep, that's exactly what happened. I found an example on adding a User and that called "Add". Same code with "Put" works now. Thanks!
The Diamond Z
No problem. If you are sure that has worked, you may like to upvote me and accept my answer :)
Rob Levine
Not enough points to vote, but I've accepted your answer.Thanks again.
The Diamond Z
@the-diamond-z - thanks! I realised I didn't upvote your question, so I just have. Welcome to Stack Overflow!
Rob Levine
A: 

You may try the following (haven't tried it myself):

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

This uses System.DirectoryServices.AccountManagement.

Ronald Wildenberg
Why would you post an answer without even trying it? It's just line noise that leads to wild goose chases.
Christopher Painter