Click here to Skip to main content
15,867,568 members
Articles / Programming Languages / C#
Article

UserManager: a class to manipulate local Windows users and groups

Rate me:
Please Sign up or sign in to vote.
4.71/5 (12 votes)
2 Aug 2006CPOL 48.4K   754   40   4
UserManager was built to simplify local users and groups manipulation

Introduction

UserManager class contains a set of methods to create/modify local Windows users and groups using System.DirectoryServices namespace. ADSI classes in Directory Services namespace enable programmers to access ADSI objects using System.DirectoryServices namespace.

Usage

By using UserManager class, a developer can use the following methods:

  • AddUser
  • RemoveUser
  • SetUserPassword
  • EnableUser
  • DisableUser
  • AddOptionFlagToUser
  • RemoveOptionFlagToUser
  • UserProperties
  • ListUsersInServer
  • AddGroup
  • GroupProperties
  • AddUserToGroup
  • ListUsersInGroup
  • ListGroupsInServer

The following code shows how to use UserManager class to create a new local user.

C#
string loginName = "TestUser";
string loginPwd = "PwdTestUser";
string loginDescription = "Descr TestUser";
string defaultGroupName = "Users";

UserManager um = new UserManager();
if (!um.AddUser(loginName, loginPwd, loginDescription, defaultGroupName))
    MessageBox.Show(um.ErrorMessage, "Warning", MessageBoxButtons.OK);
else
    MessageBox.Show("User " + loginName + " created", "Warning",
                        MessageBoxButtons.OK);

um = null;

The following is the AddUser code:

C#
public bool AddUser(string LoginName, string LoginPassword,
            string LoginDescription, string defaultGroup)
{
    bool created = false;

    try
    {
        using (DirectoryEntry AD = new
                   DirectoryEntry("WinNT://" + Environment.MachineName + ",
                                computer"))
        {
            bool found = false;

            // check if "LoginName" already exists
            try
            {
                found = AD.Children.Find(LoginName, "user") != null;
            }
            catch
            {
                found = false;
            }

            if (!found)
            {
                // create a new directory entry
                using (DirectoryEntry NewUser =
                           AD.Children.Add(LoginName, "user"))
                {
                    // set password
                    NewUser.Invoke("SetPassword", new object[] 
                            { LoginPassword });
                    // set description
                    NewUser.Invoke("Put", new object[] {"Description", 
                                                       LoginDescription});

                    // commit changes
                    NewUser.CommitChanges();

                    // set default options
                    //
                    //     UF_NORMAL_ACCOUNT
                    //     UF_PASSWD_CANT_CHANGE
                    //     UF_DONT_EXPIRE_PASSWD
                    //
                    // you can change this
                    SetDefaultOptionFlags(LoginName);

                    created = true;

                    // if defaultGroup is not null
                    // try to add new user to it
                    if ((defaultGroup != null) && 
                    (defaultGroup.Trim().Length > 0))
                    {
                        DirectoryEntry grp = null;

                        try
                        {
                            // find defaultGroup entry
                            using (grp = AD.Children.Find(defaultGroup, 
                                "group"))
                            {
                                if (grp != null)
                                {
                                    // add new user to group
                                    grp.Invoke("Add", new object[] 
                        { NewUser.Path.ToString() });
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            aErrMsg = ex.Message;
                        }
                    }

                }
            }
            else
                aErrMsg = "User already exists!";

        }
    }
    catch (Exception ex)
    {
        aErrMsg = ex.Message;
    }

    return created;
}

The following image shows the demo program, included in the zip file, which uses the UserManager class to list Users and Groups in your PC.

Image 1

Conclusion

The download file at the top of this article contains UserManager source code (.NET 2.0 and .NET 1.1 versions) and a demo project (.NET 2.0).

I hope you enjoy this article.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionGet List of groups to which a user is a "Member Of" Pin
beckman1616-Apr-09 20:41
beckman1616-Apr-09 20:41 
QuestionAdding domain user in Administrator Group Pin
Mushtaque Nizamani6-Aug-08 23:05
Mushtaque Nizamani6-Aug-08 23:05 
GeneralFailed to create new users Pin
andre_monteiro14-Jan-08 7:48
andre_monteiro14-Jan-08 7:48 
Hello! I'm trying to use your library to manage users, but I keep getting errors on access:

"General access denied error"

I'm working on Windows XP, will it work on Windows Server 2003 (I haven't tried yet)?

André Monteiro

GeneralRe: Failed to create new users Pin
el_guerrero_nocturno7-May-09 23:12
el_guerrero_nocturno7-May-09 23:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.