Automatizando a Gerência de Contas no Active Directory usando Power Shell

Veja neste artigo como automatizar todas as tarefas rotineiras que os administradores do Active Directory precisam lidar no dia a dia. Veremos diversos exemplos de como proceder utilizando as ferramentas GUI.

O gerenciamento de contas de usuário consiste em tarefas simples que são aplicadas ao sistema de arquivo, usando o Active Directory. Veremos neste artigo como realizar todas as operações de atualização e deleção de contas de usuário.

O processo de atualização de contas pode ser dividido em duas áreas: atualizar dados da conta do usuário (propriedades da conta) e atualizar o status da mesma (habilitando ou desabilitando-a).

Uma conta desabilitada não pode ser acessada. Como tudo em TI tem um ciclo de vida, com as contas de usuário isso não poderia ser diferente. Eventualmente uma conta pode acabar não sendo mais necessária por diferentes motivos e deixá-las no Active Directory é ineficiente, já que não precisa mais ser gerenciada, fora que ainda pode ser um possível risco à segurança, já que outros de dentro do sistema podem utilizá-la para atividades maliciosas.

A maior parte do trabalho em um Active Directory é o gerenciamento de contas, que também consome tempo dos administradores. Saber as habilidades necessárias para gerenciar este trabalho é algo bastante precioso. Dessa forma, neste artigo veremos formas de otimizar o tempo através do gerenciamento dessas contas da melhor forma possível, sempre procurando automatizar as tarefas utilizando o PowerShell.

Modificando Propriedades das Contas de Usuário

Muitas propriedades mudam frequentemente nas contas armazenadas no Active Directory, tais como:

O administrador do Active Directory precisa manter os dados sempre atualizados para que a organização obtenha o máximo possível de seus benefícios.

Outra característica dos atributos que serão modificados é quanto aos valores que eles podem assumir, sendo eles únicos ou múltiplos. Um exemplo disto são os números de telefones que possuem valores únicos e múltiplas propriedades (homePhone e otherHomePhone, por exemplo).

Esses atributos podem ser modificados usando ferramentas GUI ou com o PowerShell.

Usando ferramentas GUI para modificar contas de usuário

As contas de usuário podem ser modificadas utilizando o ADAC (Active Directory Administrative Center).Neste artigo não abordaremos sobre essa ferramenta, mas no link disponibilizado você acompanha uma introdução completa sobre. Assim, para modificar deve-se pesquisar nele a conta de usuário a ser modificada, clicar com o botão direito do mouse na mesma e selecionar Properties. Após isso, uma caixa de diálogo será exibida com todas as propriedades disponíveis e com seus valores atuais: modifique e salve.

Um atributo que recebe apenas um valor único (ou simples) pode ser modificado diretamente no campo dentro da caixa de diálogo. Vale ressaltar que é preciso limpá-lo antes de adicionar um valor.

Caso os valores sejam múltiplos, como no caso do telefone, o nome da propriedade se apresenta como "Other Phone Numbers...", permitindo a adição de mais valores na caixa de diálogo que é aberta, conforme o exemplo a seguir:

  1. Na caixa de diálogo clique em "Other Phone Numbers…" para abrir o popup;
  2. O tipo do telefone a ser modificado pode ser selecionado no drop-down;
  3. Em seguida, basta digitar o número na caixa e clicar no botão "Add" para adicioná-lo à conta de usuário.
  4. Se for necessário remover um valor basta selecioná-lo e clicar no botão "Remove";
  5. Para fechar o popup basta clicar em OK;
  6. Para fechar a caixa de diálogo principal também basta clicar em OK e salvar as alterações realizadas.

A alteração de conta utilizando o ADUC é semelhante: para modificar a propriedade Telephone, por exemplo, deve-se clicar na aba Telephone, conforme mostram os passos a seguir:

  1. Clique na aba "Telephone";
  2. Modifique os números exibidos na aba;
  3. Se for necessário modificar os outros números, basta clicar no botão "Other";
  4. Com a caixa aberta basta entrar com os valores e clicar no botão "Add";
  5. Para editar basta selecionar um número e alterar o valor;
  6. Depois de realizadas as operações clique em OK para fechar o popup e a caixa de diálogo aceitando as alterações realizadas.

Usando PowerShell para Modificar Contas de Usuário

A ferramenta ADAC do Windows Server 2012 exibe o código PowerShellgerado ao serem realizadas as operações através da sua interface gráfica. Isso é interessante para verificar na prática quais comandos são executados. Porém, esse código ainda pode ser simplificado.

Modificar valores simples utilizando o PowerShell é fácil usando o comando da Listagem 1.

Listagem 1. Modificando valores único com PowerShell.

Set-ADUser -Identity "CN=MEDEIROS Higor,CN=Users,DC=Devmedia,DC=com" ` -OfficePhone "234 5678"

O comando "Set-ADUser" permite que o usuário seja identificado pelo nome exclusivo do objeto no Active Directory. A convenção de nomenclatura para os comandos do PowerShell é utilizar o formato "verbo-substantivo". Assim, Set é o verbo usado quando se quer alterar alguma coisa. O parâmetro "–OfficePhone" é utilizado para fornecer o número de telefone que se deseja alterar. A maioria das propriedades das contas de usuário está disponível como parâmetro no comando "Set-ADUser".

Para modificar os números de telefone adicionais no PowerShell deve-se utiliza uma abordagem um pouco diferente. Ao invés de utilizar os parâmetros nomeados no comando "Set-ADUser" deve-se utilizar os parâmetros genéricos conforme a seguir:

Quando todos os parâmetros genéricos são utilizados em conjunto tem-se que primeiramente será executado o Remove, depois o Add, após este o Replace e, por fim, o Clear.

O exemplo da Listagem 2 mostra como utilizar o Replace.

Listagem 2. Utilizando o parâmetro Replace com PowerShell.

Set-ADUser -Identity "CN=MEDEIROS Higor,CN=Users,DC=Devmedia,DC=com" ` -Replace @{otherTelephone="2348 5678","3466 5678"}

Neste caso, é fornecida uma tabela hash "@{}" com o nome da propriedade e os novos valores separados por vírgulas.

Muitas vezes se faz necessário copiar as informações de outra conta, isso será visto na próxima seção.

Copiando atributos de outra conta

Uma situação muito corriqueira para os administradores do Active Directory é a modificação das propriedades de uma conta baseando-se nos valores da mesma propriedade de outra conta.

Para executar essa operação através de uma ferramenta GUI basta realizar as operações a seguir:

  1. Abrir a ferramenta ADUC ou ADAC;
  2. Pesquisar pelo usuário que se deseja fazer a cópia;
  3. Pesquisar a propriedade;
  4. Copiar o valor;
  5. Fechar a caixa de diálogo da propriedade;
  6. Pesquisar o usuário que será modificado;
  7. Procurar a propriedade;
  8. Colar o valor e clicar em OK para salvar.

No entanto, realizar todas essas operações para uma conta não é tão ruim, apesar de demandar um pouco de tempo, mas agora imagina fazer isso para centenas de contas? Essa é uma realidade que pertence a muito administradores.

Por isso o PowerShell ajuda bastante na automatização desse tipo de tarefa. Utilizando o código da Listagem 3 podemos realizar essa operação muito mais rapidamente.

Listagem 3. Copiando dados de uma conta e utilizando em outra conta com PowerShell.

$source = Get-ADUser -Identity crantonio -Properties OfficePhone, otherTelephone Set-ADUser -Identity "CN=MEDEIROS Higor,CN=Users,DC=Devmedia,DC=com" -OfficePhone $($source.OfficePhone) -Replace @{otherTelephone = $($source.otherTelephone)}

Primeiramente criou-se uma variável para armazenar o retorno do comando "Get-ADUser". Essa variável, portanto, representa a conta do usuário para onde as informações serão copiadas (crantonio). As propriedades necessárias que se quer copiar são explicitamente informadas colocando os nomes delas no parâmetro "–Properties". O comando “Get-ADUser” retorna um pequeno número de propriedades, por padrão.

Pode-se verificar que no "Get-ADUser" utiliza-se o samAccountName, mas também se poderia utilizar o nome exclusivo, o que é diferente do "Set-ADUser" que apenas aceita o último.

Por fim, o comando "Set-ADUser" é utilizado para modificar a conta do usuário. As expressões "$($source.OfficePhone)" e "$($source.otherTelephone)" possuem os valores do usuário copiado e irão substituir os valores antigos da conta sendo modificada.

Habilitando e Desabilitando as Contas de Usuário

Qualquer conta no Active Directory que esteja habilitada possui um risco potencial de segurança para a organização. Caso os dados de login do usuário estejam comprometidos, um atacante pode ter acesso aos dados da empresa.

Assim, as que não estão sendo usadas, mas que ainda são necessárias devem ser desabilitadas para que ela não seja utilizada para login. Desabilitar essas contas é preferível para prevenção do acesso em curto prazo. Essa possibilidade é mais interessante e menos trabalhosa do que deletar e depois ter que recria-la novamente e garantir que os dados sejam os mesmos do que os definidos anteriormente, principalmente os grupos da conta.

Uma boa prática é sempre que criar os novos usuários deixá-los desabilitados até que o usuário realmente necessite acessar.

Para desabilitar uma conta com as ferramentas GUI basta procurá-la, clicar com o botão direito sobre ela e escolher a opção "Disable" no ADAC ou "Disable Account" no ADUC. Após isso, o ADUC exibirá uma mensagem confirmando que a conta foi desabilitada, diferente do ADAC, que não exibe nenhuma mensagem.

O PowerShell fornece um comando para desabilitar uma conta, conforme o código a seguir:

Disable-ADAccount -Identity hmedeiros

O “Identity” pode ser o samAccountName, conforme o exemplo anterior, ou então o nome exclusivo.

Para certificar que a conta foi desabilitada pode-se utilizar o código da Listagem 4.

Listagem 4. Código para verificar se a conta está desabilitada.

Search-ADAccount -AccountDisabled | Format-Table Name, DistinguishedName –AutoSize

Para habilitar uma conta o processo é ao contrário. Na ferramenta GUI deve-se clicar com botão direito na conta e escolher "Enable" no ADAC ou "Enable Account" no ADUC.

O PowerShell também disponibiliza um comando para que possamos habilitar uma conta:

Enable-ADAccount -Identity hmedeiros

Uma forma mais segura de alterar o objeto correto é utilizando o código da Listagem 5.

Listagem 5. Utilizando um código mais seguro para desabilitar uma conta através da pesquisa ao usuário.

Get-ADUser -Identity hmedeiros Get-ADUser -Identity hmedeiros | Disable-ADAccount

Pode-se optar por desabilitar uma conta por um período de tempo, mas às vezes é necessário excluir uma conta em definitivo, que é o que veremos a seguir.

Deletando Contas

Quando uma conta é deletada ela não desaparece do Active Directory imediatamente, pois o objeto é marcado para exclusão e tem a maioria das suas propriedades removidas. Com isso, a conta pode ser feita novamente, mas as propriedades precisam ser recriadas. Isso é diferente de um objeto na lixeira, pois este está completo e pode ser restaurado com todas as suas propriedades. A seguir temos uma lista de cada versão do Active Directory no sistema operacional Windows e como os objetos são tratados quando excluídos (objeto marcado ou enviado para lixeira):

Os objetos permanecem na lixeira do Active Directory por um período de 60 ou 180 dias, dependendo da versão do Windows que está sendo utilizado. No entanto, esse período pode ser modificado se necessário no próprio sistema.

Após este período expirar, o objeto é finalmente removido do Active Directory automaticamente pelo sistema.

Para deletar um objeto utilizando uma ferramenta GUI basta executar os passos a seguir:

  1. Pesquise pelo objeto;
  2. Clique com o botão direito para exibir o menu de contexto;
  3. Clique em "Delete";
  4. Confirme a ação no popup.

Vale ressaltar que caso o "Protect from Accidental Deletion" esteja habilitado, não será possível deletar o objeto dessa forma. Assim, essa proteção deve ser retirada antes de realizar a deleção. Existe um checkbox na seção propriedades da conta em que é possível retirar o checkbox marcado. Após isso, a conta pode ser deletada normalmente conforme os passos anteriores.

Se a operação de deleção for realizada em uma conta no Power Shell, uma mensagem de "Access Denied" será exibida se a conta estiver protegida para deleção. Por isso, antes de realizar uma deleção basta verificar se o objeto está protegido, conforme mostra o código da Listagem 6.

Listagem 6. Verificando se há proteção contra exclusão no objeto utilizando o PowerShell.

Get-ADUser -Identity hmedeiros -Properties ProtectedFromAccidentalDeletion

Se a propriedade estiver selecionada no checkbox será retornado o valor True. Para remover essa proteção basta executar o código da Listagem 7.

Listagem 7. Excluindo a proteção contra deleção com PowerShell.

Get-ADObject -LDAPFilter "(Name=Medeiros Higor)" | Set-ADObject -ProtectedFromAccidentalDeletion:$false

Primeiramente procuramos pelo objeto e depois utilizamos um pipe para o comando Set-ADObject.

Para realizar a deleção agora basta executar o seguinte comando:

Remove-ADUser -Identity hmedeiros -Confirm:$false

Deixamos off o parâmetro "-Confirm:$false" para receber uma mensagem que força a confirmação da ação.

Modificando o Valor de Atributos Múltiplos valores

O PowerShell permite trabalhar com atributos de múltiplos valores. Para visualizá-los basta executar o código da Listagem 8.

Listagem 8. Trabalhando com valores múltiplos valores no PowerShell.

Get-ADUser -Identity hmedeiros -Properties * | select -ExpandProperty otherHomePhone

Para remover uma das entradas da lista basta executar o seguinte código:

Set-ADUser -Identity hmedeiros -Remove @{otherHomePhone = "2348 5678"}

Para adicionar um valor basta executar o código o seguinte comando:

Set-ADUser -Identity hmedeiros -Add @{otherHomePhone = "2348 5678"}

E para verificar as alterações pode-se utilizar o comando "Get-ADUser".

Modificando Múltiplas Contas

Algumas vezes se faz necessário modificar diversas contas ao mesmo tempo. Um exemplo disso é quando uma organização cria uma nova filial e diversos funcionários precisam ser deslocados para este novo local. Dessa forma, seria necessário modificar o local de todos os funcionários no Active Directory.

As ferramentas GUI suportam a seleção de múltiplos objetos e a edição de alguns atributos (não todos), o que é uma limitação. Se for necessária a edição de um atributo não suportado, ainda assim é possível editá-lo, porém é tão complicado que é melhor proceder de outra forma.

Utilizando o PowerShell isso é realizado muito mais rapidamente e de forma muito mais simples: primeiramente é preciso criar um arquivo CSV, conforme a Listagem 9.

Listagem 9. Arquivo CSV

SamAccountName,Office,StreetAddress,POBox,City,State,Zip,Country hmedeiros,"DevmRJ","Rua Antonio M.",PO567,RJ,RJ,123456,BR cmagalhaes,"DevmRJ","Rua Antonio M.",PO123,RJ,RJ,123456,BR crantonio,"DevmRJ","Rua Antonio M.",PO567,RJ,RJ,123456,BR dtonin,"DevmRJ","Rua Antonio M.",PO123,RJ,RJ,123456,BR

Após isso, basta executar o comando da Listagem 10.

Listagem 10. Realizando as modificações em massa com PowerShell.

Import-Csv -Path C:\Scripts\alteracaoendfilial.csv | foreach { Set-ADUser -Identity $_.SamAccountName -Office $_.Office ` -StreetAddress $_.StreetAddress -POBox $_.POBox -City $_.City ` -State $_.State -PostalCode $_.Zip -Country $_.Country }

Renomeando Contas

Para renomear uma conta basta seguir os procedimentos a seguir em uma ferramenta GUI disponibilizada pelo Active Directory:

  1. Clicar com o botão direito na conta;
  2. Escolher a opção "Rename";
  3. Alterar o nome da conta;
  4. Pressionar ENTER;
  5. Completar a caixa de diálogo com as informações "Full Name", "First Name", "Last Name", "Display Name" e "User Logon Name".
  6. Por fim, clicar em OK.

Para renomear uma conta no PowerShell, por incrível que pareça, é uma atividade um pouco mais complicada do que utilizar uma ferramenta gráfica, visto que teremos que utilizar alguns pipes e dividir o código em duas partes, conforme a Listagem 11.

Listagem 11. Renomeando uma conta no PowerShell.

Get-ADUser -Identity hmedeiros | Rename-ADObject -NewName "MEDEIROS Higor" Get-ADUser -Identity hmedeiros -Properties * | Set-ADUser -DisplayName "Z MEDEIROS Higor" -SamAccountName zhmedeiros ` -GivenName "Higor"

Feito isso teremos concluído tudo que é necessário para gerenciar as contas no Active Directory de forma automática.

Espero que tenham gostado do artigo. Até a próxima.

Bibliografia

[1] Usando o Windows PowerShell
https://technet.microsoft.com/pt-br/library/dn425048.aspx.

[2] Introdução ao Active Directory
https://technet.microsoft.com/pt-br/library/cc668412.aspx.

[3] Richard Siddaway, Learn Active Directory Management. Manning, 2014.

Artigos relacionados