Implementado System.DirectoryServices.AccountManagement Parte II

Hola a todos. Siguiendo con este tema aquí va la segunda parte donde actualizaremos un usuario de nuestro AD implementando System.DirectoryServices.AccountManagement.

Primero nuestro anterior articulo.

En nuestro anterior articulo no les podía demostrar la funcionalidad de actualizar pues por q no tenia un AD de pruebas, ya que salió Windows Server 2008 R2 SP1 pues decidí montarme uno para dichas pruebas y para jugar con el además. jejjej.

Ahora un poco de teoria, estas son algunas de las formas de conectarse al AD

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "example.loc", "DC=example,DC=loc");
PrincipalContext principalContext = new PrincipalContext(ContextType.Machine); //Dominio de la maquina
Para guardar cambios necesitamos implementar una enumeración para pasarla como parámetro entre formularios.
public enum AccionTipos
        {
            Filtar,
            Guardar,
            Nada,
        }

Luego implementamos nuestro botón de editar.
private void btnEditarUsuario_Click(object sender, EventArgs e)
        {
            if (lbUsuarios.SelectedItem == null)
            {
                MessageBox.Show("Por favor seleccionar usuario");
                return;
            }
            UserPrincipal userPrincipal = (UserPrincipal)lbUsuarios.SelectedItem;
            UsuariosPropiedades FrmPropiedades = new UsuariosPropiedades(userPrincipal, AccionTipos.Guardar);
            FrmPropiedades.ShowDialog();
            if (FrmPropiedades.DialogResult==DialogResult.OK)
            {
                try
                {
                    userPrincipal.Save();
                    userPrincipal.Dispose();
                    MessageBox.Show("Se actualizo el usuario");

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                ListarUsuarios();
            }
            
        }
Lo importante de este código es que estoy pasando el usuario y la opción de guardar al otro formulario el cual quedaría de la siguiente forma.
public UsuariosPropiedades(object propertyItem, Usuarios.AccionTipos actionTipos)
        {
            InitializeComponent();
            if (propertyItem is List<Principal>)
            {
                pgPrincipal.SelectedObject = ((List<Principal>)propertyItem).ToArray();
            }
            else
            {
                pgPrincipal.SelectedObject = propertyItem;
            }
            btnAccion.Text = actionTipos.ToString();
            btnAccion.Visible = (actionTipos != Usuarios.AccionTipos.Nada);
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        private void btnAccion_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            this.Close();
        }

un poco de imagenes.
image
image
image

Espero les sirva.

Romny