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.

Categorias:

Recomendados para você

Como verificar de forma eficiente a ativação do Windows e a verificação da licença usando o PowerShell

Um guia completo: Como atualizar o PowerShell para a versão 5.1

Script do PowerShell para detectar dispositivos USB: Uma ferramenta essencial para profissionais de TI

Como monitorar os logins dos usuários em sistemas Windows com o PowerShell

Aprimoramento das operações de TI: Como lidar com tempos de espera aleatórios no macOS

Como remover o Dell SupportAssist usando o PowerShell

Termos e condições NinjaOne

Ao clicar no botão “Aceito” abaixo, você indica sua aceitação dos seguintes termos legais, bem como dos nossos Termos de Uso:

  • Direitos de propriedade: A NinjaOne é proprietária e continuará a ser proprietária de todos os direitos, títulos e interesses relativos ao script (incluindo os direitos autorais). A NinjaOne está concedendo a você uma licença limitada para usar o script de acordo com os presentes termos legais.
  • Limitação de uso: Você só poderá usar o script para fins comerciais internos ou pessoais legítimos, sendo vedado compartilhar o script com terceiros.
  • Proibição de republicação: Em nenhuma circunstância você tem permissão para republicar o script em qualquer biblioteca de scripts pertencente ou sob o controle de qualquer outro fornecedor de software.
  • Isenção de responsabilidade da garantia: O script é fornecido “no estado em que se encontra” e “conforme disponível”, sem qualquer tipo de garantia. A NinjaOne não promete ou garante que o script estará livre de defeitos ou que atenderá às suas necessidades ou expectativas específicas.
  • Assunção de riscos: O uso do script é por sua própria conta e risco. Você reconhece que há certos riscos inerentes ao uso do script, e você compreende e assume cada um desses riscos.
  • Renúncia e isenção de responsabilidade: Você não responsabilizará a NinjaOne por consequências adversas ou não intencionais resultantes do seu uso do script e renunciará a quaisquer direitos ou tutelas legais que possa ter contra a NinjaOne em relação ao seu uso do script.
  • EULA: Se você for cliente da NinjaOne, o uso do script está sujeito ao Contrato de Licença de Usuário Final aplicável a você (EULA).