Пакетный скрипт для экспорта информации из Active Directory (имя, номера телефонов, местоположение и т. Д.) В CSV-файл

Секретарь на моей работе использует электронную таблицу, в которой перечислены имена, номера телефонов и местонахождение сотрудников, чтобы найти информацию, если кто-то спросит. Вся эта информация находится в AD, но проблема в том, что мы быстро растущая компания, и люди довольно часто меняют места, названия должностей, а иногда и номера телефонов, поэтому ее таблицы часто устарели. Я - техник низкого уровня, но мой начальник предложил мне попытаться собрать какой-нибудь пакетный скрипт, который она может запустить со своего компьютера, который идет в AD, вытягивает эту информацию в CSV, а затем выдает в документ Excel.

Я не слишком знаком со сценариями (немного изучал Python в школе, но не очень много), поэтому, я думаю, я просто ищу некоторые указатели в правильном направлении. Я в значительной степени понимаю, что должен делать скрипт, я просто не уверен, какие команды существуют для взаимодействия с AD и получения информации из него. Возможно ли это сделать даже с помощью пакетного скрипта? И понадобится ли ей определенный доступ к AD, чтобы запустить его со своего компьютера?

3 ответа

Если вы не используете Windows NT 4, я бы порекомендовал использовать Windows PowerShell - он мощный и довольно простой в использовании (по крайней мере по сравнению с VBScript, KiXtart и т. Д.)

Чтобы взаимодействовать и получать данные из Active Directory с помощью PowerShell, вам будет намного проще с использованием модуля Active Directory для PowerShell.

С установленным модулем AD вы можете легко запросить AD для пользовательских данных:

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

Все эти атрибуты общедоступны, это означает, что она может выполнить скрипт самостоятельно, ей не понадобится администратор, чтобы запустить ее для нее.

Если у секретаря есть Microsoft Office 2013 Professional Plus, Office 365 ProPlus или Excel 2013 Standalone, она может использовать Excel Power Query для передачи этой информации непосредственно в Excel из Active Directory. В пункте меню Excel Power Query вы выбираете "Из других источников", а затем выбираете "Из Active Directory". Требуемые данные можно выбрать в редакторе Power Query, чтобы создать отчет, который можно обновлять в любое время. Никаких дополнительных прав не требуется.

Загрузка надстройки Power Query доступна здесь: https://www.microsoft.com/en-ca/download/details.aspx?id=39379excel-FX104018616.aspx

Я могу рассказать вам, как я решил похожую проблему у бывшего работодателя. Мы использовали Windows только для размещения AD и Exchange, а все остальные серверы компании работали на FreeBSD, поэтому я разработал нашу автоматизацию экспорта с использованием инструмента с открытым исходным кодом, называемого adtool, который действует как клиент Active Directory и выплевывает списки или отдельные атрибуты., С помощью adtool, после того, как вы настроили его доступ к вашему серверу AD в соответствии с его документацией, вы можете получить базовый список с помощью команды оболочки, например

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

Для получения дополнительной информации, необходимой для каждой записи, вы можете запросить запись и проанализировать результаты:

$ adtool attributeget <object> <attribute>

В скрипте это может выглядеть примерно так:

#!/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

Этот сценарий bash предназначен для отправки данных на стандартный вывод, поэтому его можно перенаправить в файл, находящийся на сервере, или скопировать на рабочую станцию ​​вашего персонала для импорта в Excel. Обратите внимание, что это не идеально. В нынешнем виде он не избегает двойных кавычек, которые могут существовать в именах полей. Вы можете объяснить это самостоятельно, если это рискует для вас.

Боюсь, у меня нет сервера AD для тестирования этого, поэтому я не могу передать вам полное решение, но если вы решите пойти по этому пути и построить свою автоматизацию в Linux или Unix, я был бы рад чтобы помочь вам с необходимой обработкой текста, когда я увижу вывод основных команд adtool, данные которых вы анализируете.

NB. Возможно, вы также можете извлечь любые данные из Active Directory с помощью любого клиента LDAP (например, OpenLDAP, который доступен практически для всех дистрибутивов Linux и BSD). Adtool это просто удобство.

Другие вопросы по тегам