Vamos demonstrar a possibilidade de integração simples e rápida usando o PowerShell. Caso esteja procurando apenas uma forma de obter os dados de uma query de banco, leia nosso post Script PowerShell para obter uma query de um banco MS SQL ou acesse nosso repositório do GitHub.
Aqui criaremos apenas um exemplo, para que você possa alterar/criar conforme deseje. Vamos considerar algumas premissas:
- Que você tem os dados do banco de dados (servidor, usuário e senha, nome da tabela, etc.);
- Não vamos nos preocupar aqui com as máscara dos dados (ex: CPF);
- Vamos supor que a tabela do banco de dados tem os seguintes dados da TABELA_AD: CPF (que será nossa PK), DSC_CARGO, DAT_ATUALIZACAO_BD e DAT_ATUALIZACAO_AD
- Com o banco acima, iremos listas todos os registros que a data de atualização do banco é mais atual do que a atualização do AD, atualizar o AD e atualizar a data no banco;
- Que a sua credencial terá acesso a criar o objeto no Active Directory;
- Que você tem acesso (relay) para enviar e-mail;
- Por ser apenas um exemplo simples, não criaremos regras de validações (por exemplo, retirar acentuação, verificar se um login já existe antes de criarmos no AD, etc.).
Vamos ao código PowerShell:
$connectionString = "Server=SERVIDOR_BANCO\INSTANCIA;uid=USUARIO; pwd=SENHA;Database=BASE;Integrated Security=False;"
# VAMOS CONECTAR NO BANCO, FAZER A QUERY, ARMAZENAR A SAÍDA DA QUERY NA VARIÁVEL $table E DESCONECTAR DO BANCO
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = "SELECT * FROM TABELA_AD WHERE DAT_ATUALIZACAO_BD > DAT_ATUALIZACAO_AD"
$result = $command.ExecuteReader()
$table = new-object "System.Data.DataTable"
$table.Load($result)
$connection.Close()
# VAMOS FAZER UM LOOP PARA CADA REGISTRO ENCONTRADO NO BANCO
$table | ForEach-Object {
$CPF = $_.CPF.Trim(" ")
$CARGO = $_.DSC_CARGO.Trim(" ")
# CONSIDERANDO QUE O CPF (NESSE EXEMPLO) ESTEJA NO CAMPO postOfficeBox DO AD
Get-ADuser -Filter {postOfficeBox -eq $CPF} -Properties * | Set-ADuser -Title $CARGO
# AGORA VAMOS ENTRAR NOVAMENTE BANCO E ATUALIZAR O BANCO DE DADOS, SETANDO QUE ESSAS CONTAS JÁ FORAM CRIADAS
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = "UPDATE TABELA_AD SET DAT_ATUALIZACAO_AD = GETDATE() WHERE CPF = "+$CPF
$result = $command.ExecuteNonQuery()
$connection.Close()
# VAMOS REGISTRAR A ALTERAÇÃO FEITA DE CADA CARGO, PARA ADICIONAR NA MENSAGEM QUE IREMOS ENVIAR DEPOIS POR E-MAIL
if (!$msg_email)
{
$msg_email = "Dados Atualizados:`n-------------------------------------"
}
$msg_email = $msg_email + "`nAtualizado no CPF $CPF o novo cargo $CARGO"
}
#VAMOS ENVIAR O RELATÓRIO DO QUE FOI FEITO POR E-MAIL
Send-MailMessage -From 'Script MSSQL <script@suaempresa.com.br>' -To 'Conta de Atendimento <atendimento@suaempresa.com.br>', 'Conta de Suporte <suporte@suaempresa.com.br>' -Cc 'Infraestrutura <infra@suaempresa.com.br>' -Subject 'Atualização de Cargos' -Body "Dados Atualizados:`n-------------------------------------" -SmtpServer 'IP_DO_SEU_SMTP' -Port '25'
Fontes/Referências
https://github.com/luizcarlosbranco/nvlan
Mais Informações
Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.
Entre em contato conosco pelo e-mail equipe@nvlan.com.br.