Como importar usuários para o Active Directory a partir de um arquivo CSV usando o PowerShell

Um dos aplicativos mais comuns do PowerShell que vejo os profissionais de TI usarem é a sincronização de informações com o Active Directory (AD). Parece que todo mundo tem alguma fonte de dados externa que se correlaciona com alguns funcionários que precisamos colocar no AD. Isso é de se esperar, pois o AD normalmente é o serviço de TI mais usado em uma organização e oferece um excelente recurso não apenas como autenticação, mas também como repositório de informações dos funcionários.

Independentemente de você ter dados armazenados em um banco de dados SQL personalizado ou em algum sistema de RH sofisticado, é uma chatice ter que verificar dois pontos se precisar de informações como o departamento do funcionário, os grupos dos quais o funcionário deve ser membro e assim por diante. Quando você começa a sincronizar esses dados, o sistema de origem pode mudar seu esquema, pode mudar as APIs, os servidores e assim por diante, o que significa um retrabalho de código. Para garantir que a fonte de dados da qual você está sincronizando permaneça sempre a mesma e possa ser facilmente criada a partir de qualquer número de sistemas, é uma boa ideia colocar esses dados em um arquivo CSV.

Um simples arquivo CSV pode ser exportado de praticamente qualquer software ou banco de dados e, quando nesse formato, fornece ao administrador uma cópia que pode ser ajustada conforme necessário, evitando as solicitações de outra equipe para alterar um banco de dados em algum lugar.

Vamos usar um script simples que você pode usar hoje para ver como podemos sincronizar um atributo de um CSV com uma conta do AD.

Para preparar o cenário, digamos que eu tenha um CSV chamado C:Employees.csv. Esse CSV tem três colunas: FirstName, LastName e Department. Você deseja um script que possa localizar a conta do AD associada a esse nome/sobrenome e, em seguida, alterar o departamento para o que estiver no CSV.

Esse script, como qualquer script de sincronização, consistirá basicamente em três “fases” Essas “fases” são a leitura dos dados de origem (CSV, neste exemplo), a localização da ID exclusiva dos dados de origem de destino que correspondem aos dados de origem (AD samAccountName, neste exemplo) e, por fim, a gravação dos atributos associados vinculados a essa conta.

A primeira tarefa é ler o arquivo CSV.

$csvUsers = Import-Csv -Path 'C:Employees.csv'

Feito. A próxima parte é encontrar o ID exclusivo para fazer a correspondência com cada linha do arquivo CSV. Como não temos o ID exclusivo dentro do CSV, temos que criar um na hora. Para criar esse ID exclusivo, vamos presumir que a primeira inicial/o último nome de um funcionário sempre será um samAccountName do AD. Precisaremos criar essa pesquisa samAccountName e, em seguida, realizar uma consulta ao AD para verificar se existe uma conta.
Observação: Antes de prosseguirmos, certifique-se de ter baixado e instalado as ferramentas de administração do servidor remoto para o seu sistema operacional. Isso lhe dará o módulo do Active Directory PowerShell que contém os cmdlets Get-AdUser e Set-AdUser que usaremos.

foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    se ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        ## Nosso "ID exclusivo" foi encontrado. Prossiga para ler os dados CSV e gravar atributos
    } else {
        Write-Warning -Message 'User match not found' (correspondência de usuário não encontrada)
    }
}

Quando tivermos uma conta do AD para trabalhar, poderemos ler cada atributo associado ao nome do funcionário no arquivo CSV e gravar essas informações na conta do AD encontrada. Observe abaixo que estou definindo a variável $attributesToSync e lendo-a posteriormente. Fiz isso para que eu possa adicionar outros atributos que possam estar no CSV para sincronizá-los também no futuro. O exemplo abaixo está verificando primeiro se o atributo é o mesmo. Caso contrário, ele está usando o Set-AdUser para alterá-lo.

$attributesToSync = 'Department' (Departamento)
foreach ($csvUser in $csvUsers) {
    $userName = '{0}{1}' -f $csvUser.FirstName.SubString(0,1),$csvUser.LastName
    se ($adUser = Get-AdUser -Filter "samAccountName -eq $userName" -Properties $attributesToSync) {
        foreach ($attr in $attributesToSync) {
            se ($csvUser.$_ -ne $adUser.$_) {
                $setParams = @{$_ = $csvUser.$_}
                $adUser | Set-AdUser @setParams
            }
        }
    } else {
        Write-Warning -Message 'User match not found' (correspondência de usuário não encontrada)
    }
}

Este exemplo só funcionará com atributos que sejam valores de cadeia de caracteres dentro do AD. Fique atento a esses atributos, como o gerente, a data de expiração da conta e assim por diante. Esses atributos exigem que um objeto do tipo correto seja criado antes de ser gravado no AD. Seria necessária outra série de artigos para analisar os meandros da sincronização do AD e trabalhar com diferentes atributos, mas criei um PowerShell chamado PSADSync que ajuda você com isso. Ele pode ser encontrado retirando-o da Galeria do PowerShell com Install-Module PSADSync.

Adam Bertram é MVP de gerenciamento de data center e nuvem do Microsoft Windows e é autor de vários cursos de treinamento, colaborador regular de várias publicações impressas e on-line e faz apresentações em vários grupos de usuários e conferências. Você pode encontrar Adam em adamtheautomator.com ou no Twitter em @adbertram.

Próximas etapas

Montar uma equipe de TI eficaz requer uma solução centralizada que seja a principal ferramenta de entrega de serviços. Com NinjaOne, a TI monitora, gerencia, protege e oferece suporte a todos os dispositivos, onde quer que estejam, dispensando infraestrutura complexa no local.

Saiba mais sobre a solução NinjaOne Remote Script Deployment, agende uma demonstração, ou inicie sua avaliação gratuita da plataforma NinjaOne.

Categories:

Recomendações para você