Adición de un usuario al sistema local mediante servicios de directorio y Visual C sharp

En este artículo se describe cómo usar el DirectoryServices espacio de nombres para agregar un usuario al sistema local y a un grupo en Visual C#.

Versión original del producto: Visual C#
Número de KB original: 306273

Resumen

En este artículo paso a paso se muestra cómo usar el DirectoryServices espacio de nombres para agregar un usuario al sistema local y a un grupo.

Creación del ejemplo

  1. Inicie Visual Studio .NET 2003, Visual Studio 2005 o Visual Studio 2008 y, a continuación, cree un nuevo proyecto de aplicación de consola de Visual C#.

  2. En el Explorador de soluciones, haga clic con el botón secundario en Referencias y, a continuación, haga clic en Agregar referencia.

  3. Agregue una referencia al System.DirectoryServices.dll ensamblado.

  4. Reemplace el código del archivo Class1.cs por el código siguiente.

    Nota:

    En Visual C# 2005 o Visual C# 2008, el archivo Class1.cs se reemplaza por el archivo Program.cs .

    using System;
    using System.DirectoryServices;
    
    class Class1
    {
        static void Main(string[] args)
        {
            try
            {
                DirectoryEntry AD = new DirectoryEntry("WinNT://" +
                Environment.MachineName + ",computer");
                DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");
                NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
                NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
                NewUser.CommitChanges();
                DirectoryEntry grp;
    
                grp = AD.Children.Find("Guests", "group");
                if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}
                Console.WriteLine("Account Created Successfully");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            }
        }
    }
    
  5. Compile y ejecute el proyecto.

  6. Siga estos pasos en un equipo basado en Windows 2000 para comprobar que la cuenta se creó y agregó al grupo Invitado:

    1. En el menú Inicio , seleccione Programas, Herramientas administrativas y, a continuación, haga clic en Administración de equipos.
    2. Haga clic para expandir el nodo Usuarios y grupos locales . La nueva cuenta debe aparecer en el nodo Usuarios, así como en el nodo del grupo Invitado.

    Siga estos pasos en un equipo basado en Windows XP para comprobar que la cuenta se creó y agregó al grupo Invitado:

    1. En el menú Inicio, haga clic en Panel de control.
    2. Haga doble clic en Cuentas de usuario. La nueva cuenta de usuario debe aparecer en el cuadro de diálogo Cuentas de usuario.

    Importante

    Quite la cuenta de usuario recién creada del sistema después de finalizar las pruebas.

Creación de una nueva entrada de directorio

Al crear la entrada de directorio en este ejemplo, se supone que el sistema ejecuta Windows NT, Windows 2000 o Windows XP.

Nota:

La cadena que se pasa al DirectoryEntry constructor comienza por "WinNT://". También puede ejecutar Servicios de directorio en otros sistemas operativos de terceros.

DirectoryEntry AD = new DirectoryEntry("WinNT://" + SystemInformation.ComputerName + ",computer");

Agregar la entrada de directorio al árbol de directorios

El código siguiente agrega un DirectoryEntry usuario de tipo con el valor de al árbol de TestUser1 Active Directory.

DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");

Establecer la contraseña y la descripción de la nueva cuenta de usuario

El código siguiente llama al método Invoke para invocar los SetPassword métodos y Put del DirectoryEntry objeto . Esto establece la contraseña y asigna una descripción a la cuenta de usuario. Este código también llama al CommitChanges método para guardar los cambios.

NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
NewUser.CommitChanges();

Agregar la cuenta a un grupo

Para agregar la cuenta a un grupo, siga estos pasos:

  1. Defina una variable de tipo DirectoryEntry.
  2. Llame al Find método del Children miembro de la ActiveDirectory clase para rellenar la variable. En este caso, el grupo Invitado es el destino de la búsqueda. Este código prueba el valor que devuelve el Find método para determinar si se ha encontrado el grupo. Si se encuentra el grupo, se agrega la nueva cuenta de usuario al grupo.
DirectoryEntry grp;
grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}

Solución de problemas

Se produce un error en el código de este artículo si intenta ejecutar el código sin los privilegios suficientes para crear una cuenta de usuario. Para que el código se complete correctamente, el usuario que ha iniciado sesión actualmente debe ser miembro del grupo Administradores o tener permisos específicos que permitan al usuario crear cuentas de usuario.