Назад | Перейти на главную страницу

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

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

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

Если вы не используете 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, поэтому я разработал нашу автоматизацию экспорта с помощью инструмента с открытым исходным кодом под названием рекламный инструмент который действует как клиент 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, данные которых вы анализируете.

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