1. Visão Geral
Este script é um componente central do Módulo 2: Portal do Gestor do projeto "Plataforma Unificada de Trabalho Digital". Sua principal função é automatizar o processo de criação de novos usuários de forma padronizada, completa e segura, interagindo com dois ambientes Active Directory distintos: o AD principal (cliente) e o AD do servidor de e-mails (Exchange).
O script foi projetado para ser executado sem interação manual e oferece as seguintes funcionalidades:
- Suporte a mais de 25 atributos do Active Directory, cobrindo identidade, contato, organização e perfil.
- Criação de usuário único através de parâmetros diretos ou criação em massa via importação de arquivo
.csv. - Validações robustas e sequenciais para garantir a integridade dos dados antes da criação (parâmetros de conexão, campos críticos, unicidade de login/UPN, OU existente, etc.).
- Geração de senha temporária segura para o novo usuário.
- Logging detalhado de todas as ações, sucessos e falhas em um arquivo de texto local para fins de auditoria.
2. Pré-requisitos
Antes de executar o script, garanta que o ambiente atende aos seguintes requisitos:
- PowerShell 5.1 ou superior.
- Módulos do PowerShell:
ActiveDirectory: Deve estar instalado na máquina que executará o script (parte das Ferramentas de Administração de Servidor Remoto - RSAT).- Ferramentas de Gerenciamento do Exchange: Necessárias para o cmdlet
Enable-Mailbox.
- Permissões: A conta de serviço utilizada para executar o script (fornecida via
Get-Credential) precisa de permissões no Active Directory para:- Ler as propriedades da floresta (
Get-ADForest). - Criar e modificar objetos de usuário nas OUs de destino.
- Habilitar caixas de correio no Exchange.
- Ler as propriedades da floresta (
- PowerShell Remoting (WinRM): Deve estar habilitado nos Domain Controllers para que o logging remoto no Windows Event Log funcione corretamente.
3. Estrutura do Arquivo CSV
Para a criação em massa, é necessário um arquivo .csv com uma estrutura específica. A primeira linha do arquivo deve ser o cabeçalho. O script é flexível: se uma coluna opcional não existir no seu CSV, ela será simplesmente ignorada.
3.1. Atributos Críticos Obrigatórios
Estes campos são exigidos pelo script para cada usuário. Se alguma dessas colunas estiver vazia em uma linha do CSV, essa linha será ignorada e um erro será registrado no log.
| Cabeçalho | Descrição | Exemplo |
|---|---|---|
SamAccountName |
O nome de logon do usuário (curto, pré-Windows 2000). Único na floresta. | joao.silva |
UserPrincipalName |
O logon principal do usuário (e-mail). Único na floresta. | joao.silva@empresa.com.br |
GivenName |
O primeiro nome do usuário. | João |
Surname |
O sobrenome do usuário. | Silva |
Name |
O nome completo de exibição do usuário. | "João da Silva" |
Path |
O Distinguished Name (DN) completo da OU onde a conta será criada. | "OU=Funcionarios,OU=EmpresaX,DC=exch,DC=local" |
3.2. Atributos Opcionais Suportados
As colunas a seguir são opcionais. Se a coluna não existir ou o valor estiver em branco, o script simplesmente não preencherá o campo correspondente no Active Directory.
Organização
| Cabeçalho | Descrição | Exemplo |
|---|---|---|
Title |
O cargo do usuário (ex: "Analista de Sistemas"). | Analista Financeiro |
Department |
O departamento do usuário (ex: "TI", "Financeiro"). | Financeiro |
Company |
O nome da empresa do usuário. | Grupo Pralog |
Manager |
O SamAccountName do gestor direto do usuário. O script irá procurar o DN dele. |
gestor.area |
EmployeeID |
O número de matrícula (ID) único do colaborador, vindo do sistema de RH. | 95481 |
EmployeeNumber |
O número funcional do colaborador. | A-95481 |
Contato e Endereço
| Cabeçalho | Descrição | Exemplo |
|---|---|---|
OfficePhone |
O telefone comercial principal. | +55 21 3344-5566 |
MobilePhone |
O telefone celular do usuário. | +55 21 99999-8888 |
EmailAddress |
O endereço de e-mail de resposta principal. | contato@empresa.com.br |
StreetAddress |
O endereço (rua e número). | Rua Principal, 123 |
City |
A cidade. | Rio de Janeiro |
State |
O estado ou província. | RJ |
PostalCode |
O código postal (CEP). | 22000-000 |
Country |
O país (código de 2 letras, ex: 'BR'). | BR |
Perfil e Atributos Customizados
| Cabeçalho | Descrição | Exemplo |
|---|---|---|
Description |
Uma breve descrição sobre o usuário ou sua função. | Analista responsável por contas a pagar. |
Office |
O nome do escritório ou localidade física. | Matriz RJ |
HomePage |
A URL para a página pessoal ou perfil do LinkedIn do usuário. | https://linkedin.com/in/joaosilva |
ProxyAddresses |
E-mails secundários (aliases), separados por ponto-e-vírgula (;). |
alias1@empresa.com;alias2@empresa.com |
extensionAttribute1 |
Atributo personalizado 1 (ex: Centro de Custo). | FIN-RJ-01 |
extensionAttribute2 |
Atributo personalizado 2 (ex: ID de Projeto). | PROJETO-X |
Controle da Conta
| Cabeçalho | Descrição | Exemplo (True ou False) / Data |
|---|---|---|
PasswordNeverExpires |
Se True, a senha do usuário nunca expira. |
False |
CannotChangePassword |
Se True, impede que o próprio usuário altere sua senha. |
False |
AccountExpirationDate |
Define uma data para a conta ser desativada automaticamente (formato dd/MM/aaaa). |
31/12/2025 |
3.3. Arquivo de Exemplo Completo: importacao_geral.csv
SamAccountName,UserPrincipalName,GivenName,Surname,Name,Path,Title,Department,Company,Manager,EmployeeID,EmployeeNumber,OfficePhone,MobilePhone,EmailAddress,StreetAddress,City,State,PostalCode,Country,Description,Office,HomePage,PasswordNeverExpires,CannotChangePassword,AccountExpirationDate,extensionAttribute1,extensionAttribute2,ProxyAddresses
ana.silva,ana.silva@grupopralog.com.br,Ana,Silva,"Ana Clara Silva","OU=Financeiro,OU=GrupoPralog,DC=exch,DC=local",Financeiro,"Analista Financeiro Sênior",Grupo Pralog,gestor.financeiro,10234,A-10234,"+55 21 3344-5566","+55 21 99999-8888",ana.silva@grupopralog.com.br,"Rua Principal, 123","Rio de Janeiro",RJ,"22000-000",BR,"Analista responsável pelas contas a pagar.","Rio de Janeiro","[https://portal.grupopralog.com.br](https://portal.grupopralog.com.br)",False,False,,"FIN-RJ-01","PROJETO-X","financeiro@grupopralog.com.br;contas.pagar@grupopralog.com.br"
bruno.temporario,bruno.temporario@enseg.com.br,Bruno,Costa,"Bruno Costa (Temp)","OU=Temporarios,OU=Enseg,DC=exch,DC=local",Operacional,"Técnico Temporário",Enseg,,T-90876,,,,,,"São Paulo",SP,"01000-000",BR,"Prestador de serviço para o projeto Y.",São Paulo,,False,True,"31/12/2025","OPE-SP-05",,""
4. Como Usar
4.1. Criação de Usuário Único
- Prepare as credenciais:
$clientCred = Get-Credential $exchangeCred = Get-Credential - Execute o script com os parâmetros:
.\New-UnifiedADUser.ps1 -SamAccountName 'teste.user' -GivenName 'Usuario' -Surname 'Teste' -Name "Usuario Teste" -UserPrincipalName 'teste.user@itguys.com.br' -Path "OU=Usuarios,DC=exch,DC=local" -Title "Analista de Testes" -Department "QA" -OfficePhone "+55 11 5555-4444" -ClientADServer "192.168.1.10" -ClientADCredential $clientCred -ExchangeADServer "192.168.10.20" -ExchangeADCredential $exchangeCred
4.2. Criação em Massa via CSV
- Prepare as credenciais:
$clientCred = Get-Credential $exchangeCred = Get-Credential - Execute o script com o parâmetro
-CsvPath:.\New-UnifiedADUser.ps1 -CsvPath "C:\caminho\para\importacao_geral.csv" -ClientADServer "192.168.1.10" -ClientADCredential $clientCred -ExchangeADServer "192.168.10.20" -ExchangeADCredential $exchangeCred
5. Validações, Logs e Tratamento de Erros
O script possui múltiplas camadas de validação para garantir a robustez do processo.
- Validação de Conexão: O script falha imediatamente se os parâmetros de servidor ou credenciais estiverem vazios, evitando a execução parcial.
- Validação de Dados por Usuário: Para cada linha do CSV (ou para o usuário único), o script verifica:
- Se todos os 6 campos críticos obrigatórios estão preenchidos.
- Se o
SamAccountNamee oUserPrincipalNamepropostos já não existem no Active Directory. - Se a
Path(OU) de destino é válida e existe. - Se o sufixo do
UserPrincipalName(domínio) é válido na floresta.
- Logs: Todas as operações, sucessos, avisos (como um gestor não encontrado) e erros são gravados em um arquivo de log diário chamado
New-UnifiedADUser-Log-AAAA-MM-DD.txt.
Se uma linha do CSV falhar em qualquer validação, um erro detalhado é logado, e o script continua para a próxima linha, garantindo que o processo em massa não seja interrompido.