Click here to Skip to main content
Click here to Skip to main content

UserManager: a class to manipulate local Windows users and groups

, 2 Aug 2006
Rate this:
Please Sign up or sign in to vote.
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.

    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:

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.

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)

About the Author

Massimo Beatini
Web Developer
Italy Italy
No Biography provided

Comments and Discussions

 
QuestionAdding domain user in Administrator Group PinmemberMushq6-Aug-08 23:05 

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

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

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 2 Aug 2006
Article Copyright 2006 by Massimo Beatini
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid