C# - Criando uma conta do usuário local do Windows


 Neste artigo vou mostrar como criar uma conta de usuário local do Windows usando a linguagem c#.

A pasta Users, que está localizada no Console de Gerenciamento Microsoft (MMC) dos Usuários e Grupos Locais, exibe contas de usuário padrão, bem como as contas de usuário que você criou. Essas contas de usuário padrão são criadas automaticamente quando você instala o sistema operacional. Você tem contas de administrador e de convidados.

Podemos criar contas de usuários locais via código e é isso que vou mostrar neste artigo.

Para isso você tem que executar o Visual Studio como administrador do sistema e precisa incluir uma referência a System.DirectoryServices no projeto.

O namespace System.DirectoryServices fornece acesso aos serviços de domínio Active Directory do código gerenciado.

Ele contém duas classes de componente, DirectoryEntry e DirectorySearcher, que usam a tecnologia de Interfaces de serviços do Active Directory (ADSI). (A ADSI é o conjunto de interfaces que a Microsoft fornece para trabalhar com uma variedade de provedores de rede.)

Vamos incluir também uma referência ao namespace System.DirectoryServices.AccountManagement para poder usar a classe PrincipalContext que encapsula o servidor ou o domínio contra o qual todas as operações são executadas, o contêiner que é usado como a base dessas operações e as credenciais usadas para executar as operações.

Recursos Usados :

Criando o projeto Console

Abra o VS 2017 Community e crie um projeto do tipo Console App(.NET Framework) chamado CShp_ContaUsuarioLocal:

A seguir inclua uma referência aos namespaces System.DirectoryServices e System.DirectoryServices.AccountManagement no projeto clicando sobre o projeto e a seguir em Add Reference:

Agora crie uma classe chamada ContaUsuario e defina o código abaixo :

using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
namespace CShp_ContaUsuarioLocal
{
    public static class ContaUsuario
    {
        public static bool CriaContaUsuarioLocalWindows(string nomeUsuario, 
                                                     string password, 
                                                     string nomeExibido, 
                                                     string descricao, 
                                                     bool podeAlterarSenha, 
                                                     bool senhaExpira)
        {
            try
            {
                PrincipalContext contexto = new PrincipalContext(ContextType.Machine);
                UserPrincipal usuario = new UserPrincipal(contexto);
                usuario.SetPassword(password);
                usuario.DisplayName = nomeExibido;
                usuario.Name = nomeUsuario;
                usuario.Description = descricao;
                usuario.UserCannotChangePassword = podeAlterarSenha;
                usuario.PasswordNeverExpires = senhaExpira;
                usuario.Save();
                //inclui o usuário no grupo "Users" para exibir no painel de controle
                GroupPrincipal grupo = GroupPrincipal.FindByIdentity(contexto, "Users");
                grupo.Members.Add(usuario);
                grupo.Save();
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void CriaContaUsuarioLocalWindows(string Nome, string Senha)
        {
            try
            {
                DirectoryEntry AD = new DirectoryEntry("WinNT://" +
                                                      Environment.MachineName + ",computer");
                DirectoryEntry novoUsuario = AD.Children.Add(Nome, "user");
                novoUsuario.Invoke("SetPassword", new object[] { Senha });
                novoUsuario.Invoke("Put", new object[] { "Descricao", "Teste Cria Conta Usuario" });
                novoUsuario.CommitChanges();
                DirectoryEntry grp;
                grp = AD.Children.Find("Administrators", "group");
                if (grp != null)
                {
                    grp.Invoke("Add", new object[] 
                    {
                        novoUsuario.Path.ToString()
                    });
                }     
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}

Nesta classe temos dois métodos sobrecarregados que permitem criar contas de usuários locais.

Agora é só alegria...

Abra o arquivo Program.cs e no método Main() defina o código que vai usar um dos dois métodos definidos acima para criar a conta de usuário local:

using System;
using static System.Console;
namespace CShp_ContaUsuarioLocal
{
    class Program
    {
        public static string Nome;
        public static string Senha;
        public static string nomeExibido = "NovoUsuarioIncluido";
        public static string descricao = "Novo Usuario incluido via Console";
        public static bool podeAlterarSenha = true;
        public static bool senhaExpira = true;
        static void Main(string[] args)
        {
            WriteLine("Criar Conta de Usuário do Windows");
            WriteLine("Informe o nome do usuário: ");
            Nome = ReadLine();
            WriteLine("Informe a senha do usuário :");
            Senha = ReadLine();
            try
            {
                //ContaUsuario.CriarContaUsuarioLocalWindows(Nome, Senha);
                ContaUsuario.CriaContaUsuarioLocalWindows(Nome, Senha, nomeExibido, descricao, podeAlterarSenha, senhaExpira);
            }
            catch(Exception ex)
            {
                WriteLine("Erro " + ex.Message);
            }
            ReadLine();
        }
    }
}

Executando a aplicação

Executando a aplicação e informando o nome e a senha do usuário teremos o seguinte resultado:

Este artigo apenas demonstra o uso do recurso.

Para usar em um ambiente de produção um tratamento mais elaborado do código é necessário como a geração das senhas e o tratamento dos erros.

Pegue o projeto completo aqui :  CShp_ContaUsuarioLocal.zip

(Disse Jesus) Não vos deixarei órfãos; voltarei para vós. João 14:18

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti