Блог did5.ru

Про АйТи и около айтишные темы

[PowerShell] Экспорт учетных записей из AD в XML

13 комментариев

Для создания телефонного справочника на портале SharePoint 2010 Foundation нужен XML-файл со всеми контактами, т.е. с именами, телефонами, отделами и т.д. Весь процесс создания телефонного справочника подробно описал Илья Сазонов. За основу я взял его скрипт и подогнал под свою задачу.

В домене около 1500 учетных записей, а скрипт выдавал только 1000. Решением было добавить свойство PageSize, подробнее про него на сайте TechNet.

#
# Поиск учетный записей в AD с помощью PowerShell и вывод результата в XML файл
#
# Searching Active Directory with Windows PowerShell - http://technet.microsoft.com/en-us/library/ff730967.aspx
# Windows PowerShell Tip of the Week - http://technet.microsoft.com/en-us/library/ff730959.aspx
# Описание параметров DirectorySearcher - http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher_properties.aspx
#
# http://did5.ru
# 23.11.2011

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = "LDAP://ou=Users,ou=did5,dc=contoso,dc=com"
# поиск будет по всему поддереву(по вложенным OU), "Base"-только по OU, "OneLevel"-поиск на один уровень ниже
$objSearcher.SearchScope = "Subtree"
# если в OU пользователей больше 1000, то нужно задать следующий параметр PageSize = 1000
$objSearcher.PageSize = 1000
$objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2)(title=*))"
# Filters: (objectCategory=person)-поиск только учетных записей пользователей, (objectClass=user)-только УЗ, без контактов
# (!userAccountControl:1.2.840.113556.1.4.803:=2)-учетный записи, которые disable, а восклицательный знак исключает их,
# (title=*)-УЗ с заполненной графой «Должность»(title)
$users = $objSearcher.FindAll()

$template = @"
<domainusers>

"@

$users | ForEach-Object {
$_ = $_.GetDirectoryEntry()

$template += @"
<user>
<ФИО> $($_.cn.ToString())</ФИО>
<Отдел> $($_.department.ToString())</Отдел>
<Должность> $($_.description.ToString())</Должность>
<Комната> $($_.physicalDeliveryOfficeName.ToString())</Комната>
<Телефон> $($_.telephonenumber.ToString())</Телефон>

</user>
"@

}

$template += @"

</domainusers>
"@

# $template # вывести все учетные записи на экран
$xmlusers = New-Object xml
$xmlusers.LoadXML($template)
$xmlusers.Save("d:\xml\xmlusers_all.xml")

В результате получаем XML-файл такого вида:

<domainusers>
  <user>
    <ФИО> Иванов Иван Иванович</ФИО>
    <Отдел> 900</Отдел>
    <Должность> заведующий секретариатом</Должность>
    <Комната> 845</Комната>
    <Телефон> 658</Телефон>
  </user>
  <user>
    <ФИО> Сидоров Николай Петрович</ФИО>
    <Отдел> 950</Отдел>
    <Должность> генеральный директор</Должность>
    <Комната> 100</Комната>
    <Телефон> 980</Телефон>
  </user>
</domainusers>

Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!


Хотите поблагодарить автора за эту заметку? Вы можете это сделать!


Автор: did5

24 Ноя 2011 в 9:30

Рубрика: PowerShell

Метки:

13 комментариев на «[PowerShell] Экспорт учетных записей из AD в XML»

Вы можете подписаться на RSS-ленту комментариев или оставить

  1. Добрый день! Пробовал воспользоваться вашим скриптом, но шел выдает кучу ошибок. Несилен в написании скриптов, но мне нужно получить подобный файл. Можете чем-то помочь?

    Александр

    12 мая 2012 в 09:58

  2. Александр, тут надо смотреть на ошибки, сделайте скриншот и выложите ссылку на него тут

    did5

    13 мая 2012 в 09:30

  3. Вот текст лога:

    Александр

    14 мая 2012 в 11:10

  4. files.mail.ru/WME7DC Повторно. Почему-то не видна ссылка

    Александр

    14 мая 2012 в 11:12

  5. Александр, а Вы где выполняете скрипт? Нужен сервер с AD, либо ПК с установленным RSAT

    did5

    15 мая 2012 в 14:34

  6. На сервере конечно.

    Александр

    15 мая 2012 в 15:00

  7. Александр, проверьте первую часть скрипта — поиск УЗ. После строки $users = $objSearcher.FindAll () вставьте $users. Должен появиться список всех УЗ, если не появится, то что-то не правильно вы указалаи в параметрах поиска, например — $objSearcher.SearchRoot

    did5

    16 мая 2012 в 13:51

  8. А реально тоже самое сделать для вывода в xml данных об organization-unit ?

    Alexandr

    19 Авг 2014 в 15:35

  9. Неправильно указывать должность в поле description, для должности в ad есть свое поле.

    mserver

    12 Сен 2014 в 11:17

  10. Спасибо за скрипт, все работает. Есть вопрос как вставить еще одну строку типа (число по порядку 1,2,3 и тд)?

    and115

    18 Июн 2018 в 13:23

  11. Здравствуйте! Все почти получилось. Есть вопрос с выводом. Мне надо , что группировал по отделам.

    Пример:

    Пример:

    Заранее спасибо за помощь!

    Ким

    09 Июн 2021 в 09:21

  12. Пример не отобразился. Повторяю.

    Ким

    09 Июн 2021 в 09:59

  13. Опять. Пишу без разметки

    Отдел1

    Пользователь1

    Пользователь2

    Отдел2

    Пользователь3

    Пользователь4

    Ким

    09 Июн 2021 в 10:01

Ваш отзыв