Script em lote para exportar informações do Active Directory (nome, números de telefone, localização, etc.) em um arquivo csv

2

A secretária do meu trabalho usa uma planilha que lista nomes, números de telefone e locais dos funcionários para procurar informações se alguém perguntar. Todas essas informações estão localizadas no AD, mas o problema é que somos uma empresa em rápido crescimento, e as pessoas mudam de local, de cargos e, às vezes, de números de telefone com frequência. Por isso, sua planilha está frequentemente desatualizada. Eu sou uma técnica de baixo nível, mas meu chefe me sugeriu que eu deveria tentar montar um script em lote de algum tipo que ela possa executar a partir do seu computador que vai para o AD, puxar essa informação para um csv e depois lançar isso em um documento do excel.

Eu não estou muito familiarizado com scripts (fiz um pouco de python na escola, mas não uma quantidade enorme), então eu acho que estou apenas procurando por alguns ponteiros na direção certa. Eu praticamente entendo exatamente o que o script precisa fazer, não tenho certeza de quais comandos estão lá para interagir com o AD e extrair informações dele. É possível fazer isso com um script em lote? E ela precisaria de certo acesso ao AD para executá-lo em seu computador?

    
por James F 01.10.2014 / 01:35

3 respostas

2

A menos que você esteja usando o Windows NT 4, recomendo usar o Windows PowerShell - é muito poderoso e fácil de usar (pelo menos se comparado ao VBScript, KiXtart etc.)

Para interagir e recuperar dados do Active Directory com o PowerShell, sua vida será muito mais fácil usando o Módulo do Active Directory para o PowerShell.

Com o Módulo AD no lugar, você pode consultar facilmente o AD para os dados do usuário:

Import-Module ActiveDirectory

# define the attributes we are interested in, this is the ldap-display-name of the attributes
$InterestingAttributes = "displayName","physicalDeliveryOfficeName","telephoneNumber"
# Use Get-ADUser to retrieve all enabled users, Select-Object to filter out stuff like the object DN
$ADUsers = Get-ADUser -LDAPFilter "(!(userAccountControl:1.2.840.113556.1.4.803:=2))" -Properties $InterestingAttributes |Select-Object -Property $InterestingAttributes

$ADUsers | Export-Csv -Path "C:\Users\HerAccountName\Desktop\Users.csv" -NoTypeInformation

Esses atributos são todos públicos, o que significa que ela pode executar o script por conta própria, ela não precisará de um administrador para executá-lo por ela

    
por 01.10.2014 / 15:50
1

Posso dizer-lhe como resolvi um problema semelhante em um antigo empregador. Estávamos usando o Windows apenas para hospedar o AD e o Exchange, e todos os outros servidores da empresa rodavam o FreeBSD , então desenvolvi nossa automação de exportação usando um sistema aberto. ferramenta de código-fonte chamada adtool que funciona como um cliente do Active Directory e exibe listas ou atributos individuais. Com o adtool, depois de configurar seu acesso ao servidor do AD de acordo com sua documentação, você puxaria a lista básica com um comando shell como:

$ adtool list ou=user,dc=example,dc=com

Para as informações adicionais necessárias em cada registro, você pode consultar o registro e analisar os resultados:

$ adtool attributeget <object> <attribute>

Em um script, isso pode parecer algo como:

#!/bin/bash

fmt='"%s","%s","%s"\n'    # Grow as required

adtool list ou=user,dc=example,dc=com | sed -e 's/^\S*=/"/;s/,\S*/"/' | while read name; do
  sAMAccountName=$(adtool attributeget "$name" sAMAccountName)
  email=$(adtool attributeget "$name" mail)
  somethingelse=$(adtool attributeget "$name" somethingelse)
  # etc
  printf "$fmt" "$sAMAccountName" "$email" "$somethingelse" ...
done

Este script bash destina-se a enviar dados para stdout, para que possa ser redirecionado para um arquivo que esteja em um servidor ou seja copiado para a estação de trabalho de sua equipe para importação no Excel. Note que não é perfeito . Da forma como está, ele não escapa de aspas duplas que possam existir nos nomes de campo. Você pode explicar isso por si mesmo se for um risco para você.

Eu tenho medo de não ter um servidor AD para testar isso, então não posso entregar uma solução completa, mas se você decidir seguir esse caminho e construir sua automação no Linux ou no Unix, eu Ficarei feliz em ajudá-lo com o processamento de texto necessário, uma vez que vejo a saída dos comandos básicos do adtool cujos dados você está analisando.

NB: Provavelmente, você também pode extrair os dados que deseja do Active Directory usando qualquer cliente LDAP (como OpenLDAP , que está disponível para quase todas as distros do linux e do BSD). Adtool é apenas uma conveniência.

    
por 01.10.2014 / 16:42
1

Se a secretária tiver o Microsoft Office 2013 Professional Plus, o Office 365 ProPlus ou o Excel 2013 Standalone, ela poderá usar o Excel Power Query para extrair essas informações diretamente para o Excel do Active Directory. Na opção do menu Excel Power Query, escolha "De outras origens" e escolha "Do Active Directory". Os dados necessários podem ser selecionados no editor Power Query para criar um relatório que seja atualizável a qualquer momento. Nenhum direito adicional deve ser exigido.

O download do complemento do Power Query está disponível aqui: link

    
por 07.10.2014 / 14:02