[PowerShell] Экспорт учетных записей из AD в XML
Для создания телефонного справочника на портале 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! Спасибо!
Хотите поблагодарить автора за эту заметку? Вы можете это сделать!
Добрый день! Пробовал воспользоваться вашим скриптом, но шел выдает кучу ошибок. Несилен в написании скриптов, но мне нужно получить подобный файл. Можете чем-то помочь?
Александр
12 мая 2012 в 09:58
Александр, тут надо смотреть на ошибки, сделайте скриншот и выложите ссылку на него тут
did5
13 мая 2012 в 09:30
Вот текст лога:
Александр
14 мая 2012 в 11:10
files.mail.ru/WME7DC Повторно. Почему-то не видна ссылка
Александр
14 мая 2012 в 11:12
Александр, а Вы где выполняете скрипт? Нужен сервер с AD, либо ПК с установленным RSAT
did5
15 мая 2012 в 14:34
На сервере конечно.
Александр
15 мая 2012 в 15:00
Александр, проверьте первую часть скрипта — поиск УЗ. После строки $users = $objSearcher.FindAll () вставьте $users. Должен появиться список всех УЗ, если не появится, то что-то не правильно вы указалаи в параметрах поиска, например — $objSearcher.SearchRoot
did5
16 мая 2012 в 13:51
А реально тоже самое сделать для вывода в xml данных об organization-unit ?
Alexandr
19 Авг 2014 в 15:35
Неправильно указывать должность в поле description, для должности в ad есть свое поле.
mserver
12 Сен 2014 в 11:17
Спасибо за скрипт, все работает. Есть вопрос как вставить еще одну строку типа (число по порядку 1,2,3 и тд)?
and115
18 Июн 2018 в 13:23
Здравствуйте! Все почти получилось. Есть вопрос с выводом. Мне надо , что группировал по отделам.
Пример:
Пример:
Заранее спасибо за помощь!
Ким
09 Июн 2021 в 09:21
Пример не отобразился. Повторяю.
Ким
09 Июн 2021 в 09:59
Опять. Пишу без разметки
Отдел1
Пользователь1
Пользователь2
Отдел2
Пользователь3
Пользователь4
Ким
09 Июн 2021 в 10:01