Собственно выгрузка контактных координат сотрудников (телефонной книги) из AD
Решим, наконец, поставленную задачу – выгрузим контактные координаты сотрудников из AD (ADpowershell).
Приступим. В качестве DC у нас выступаем Windows Server 2003 с установленным ADWS (или Active Directory Management Gateway Service). В качестве клиента используем для начала Windows Server 2008 R2.
Читаем Active Directory Cmdlets in Windows PowerShell, конкретно – Get-ADUser. Поддерживает три набора атрибутов. Самый привычный, я думаю, будет с параметром LDAPFilter, однако попробуем использовать “родной” Filter.
Первый код:
import-module ActiveDirectory Get-ADUser ` -Filter * ` -SearchBase 'OU=Служба сбыта,OU=Научно-производственный дивизион,OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru' ` -SearchScope Subtree ` -Properties ` displayName, givenName, sn, initials, title, userPrincipalName, info, ` manager, ` company, department, ` co, countryCode, postalCode, st, l, streetAddress, ` telephoneNumber, facsimileTelephoneNumber, homePhone, ipPhone, mobile, otherTelephone, wWWHomePage, mail ` | format-table
Свойства объекта в параметре Properties перечисляем только необходимые. Следует помнить: даже если мы хотим получить все учётные записи пользователей, параметр Filter следует указать (для всех ‘*’) (две полезные статьи по фильтрам на нашем родном языке: Active Directory PowerShell – Расширенный фильтр, Active Directory PowerShell – Расширенный фильтр (Часть 2)).
Идентификаторы удобно подглядеть через консоль ADSI. Этот код генерирует неудобный для печати вывод, в таком виде посылать на корректировку и согласование смысла нет. Кроме того, приведённый выше код выдаёт и “лишние” объекты, в том числе — “почтовые ящики подразделений”, созданные на базе того же объекта, что и учётная запись пользователя. Их следует фильтровать (name=ПЯ). Доработаем код с учётом изложенных замечаний.
import-module ActiveDirectory Get-ADUser ` -Filter * ` -SearchBase 'OU=Служба сбыта,OU=Научно-производственный дивизион,OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru' ` -SearchScope Subtree ` -Properties ` displayName, givenName, sn, initials, title, userPrincipalName, info, ` manager, ` company, department, ` co, countryCode, postalCode, st, l, streetAddress, ` telephoneNumber, facsimileTelephoneNumber, homePhone, ipPhone, mobile, otherTelephone, wWWHomePage, mail ` | format-table ` -property ` @{Name = "ФИО"; Expression = {$_.displayName;}}, ` @{Name = "Фамилия"; Expression = {$_.sn;}}, ` @{Name = "Имя"; Expression = {$_.givenName;}}, ` @{Name = "Инициалы"; Expression = {$_.initials;}}, ` @{Name = "Должность"; Expression = {$_.title;}}, ` @{Name = "Телефон"; Expression = {"+7 (816 2) $($_.otherTelephone)"}}, ` @{Name = "Факс"; Expression = {"+7 (816 2) $($_.facsimileTelephoneNumber)"}}, ` @{Name = "Мобильный"; Expression = {"+7 (816 2) $($_.mobile)"}}, ` @{Name = "e-mail"; Expression = {$_.mail;}}, ` @{Name = "Сайт"; Expression = {$_.wWWHomePage;}} ` -autoSize
Теперь мы уже имеем таблицу с необходимыми нам столбцами и приличными заголовками.
Однако, хотелось бы получить некое подобие документа. И по почте отправить на согласование. Выгрузить можно в csv, чтобы затем загрузить в excel, либо же попробуем выгрузить непосредственно в html.
import-module ActiveDirectory Get-ADUser ` -Filter * ` -SearchBase 'OU=Служба сбыта,OU=Научно-производственный дивизион,OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru' ` -SearchScope Subtree ` -Properties ` displayName, givenName, sn, initials, title, userPrincipalName, info, ` manager, ` company, department, ` co, countryCode, postalCode, st, l, streetAddress, ` telephoneNumber, facsimileTelephoneNumber, homePhone, ipPhone, mobile, otherTelephone, wWWHomePage, mail ` | select-object ` -property ` @{Name = "ФИО"; Expression = {$_.displayName;}}, ` @{Name = "Фамилия"; Expression = {$_.sn;}}, ` @{Name = "Имя"; Expression = {$_.givenName;}}, ` @{Name = "Инициалы"; Expression = {$_.initials;}}, ` @{Name = "Должность"; Expression = {$_.title;}}, ` @{Name = "Телефон"; Expression = {"+7 (816 2) $($_.otherTelephone)"}}, ` @{Name = "Факс"; Expression = {"+7 (816 2) $($_.facsimileTelephoneNumber)"}}, ` @{Name = "Мобильный"; Expression = {"+7 (816 2) $($_.mobile)"}}, ` @{Name = "e-mail"; Expression = {$_.mail;}}, ` @{Name = "Сайт"; Expression = {$_.wWWHomePage;}} ` | convertTo-html ` | out-File c:\temp\usersProperties.html
Эта редакция сценария позволяет нам получить примитивный html файл с таблицей. Дальше с ним уже можно делать всё, что угодно. В моём случае (благо задача не предполагает повторений) – грузим в Microsoft Word и делаем, что надо.
Замечательный пример от Microsoft на тему оформления html кода с использованием convertTo-html, пример для размышлений – эксперименты на XML + XSLT.
Поправим немного фильтр. Как уже говорил, в моём случае учётные записи с name=ПЯ являются ящиками подразделений, а не учётными записями сотрудников. Поэтому их исключим.
import-module ActiveDirectory Get-ADUser ` -Filter {name -ne 'ПЯ'} ` -SearchBase 'OU=Служба сбыта,OU=Научно-производственный дивизион,OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru' ` -SearchScope Subtree ` -Properties ` displayName, givenName, sn, initials, title, userPrincipalName, info, ` manager, ` company, department, ` co, countryCode, postalCode, st, l, streetAddress, ` telephoneNumber, facsimileTelephoneNumber, homePhone, ipPhone, mobile, otherTelephone, wWWHomePage, mail ` | select-object ` -property ` @{Name = "ФИО"; Expression = {$_.displayName;}}, ` @{Name = "Фамилия"; Expression = {$_.sn;}}, ` @{Name = "Имя"; Expression = {$_.givenName;}}, ` @{Name = "Инициалы"; Expression = {$_.initials;}}, ` @{Name = "Должность"; Expression = {$_.title;}}, ` @{Name = "Телефон"; Expression = {"+7 (816 2) $($_.otherTelephone)"}}, ` @{Name = "Факс"; Expression = {"+7 (816 2) $($_.facsimileTelephoneNumber)"}}, ` @{Name = "Мобильный"; Expression = {"+7 (816 2) $($_.mobile)"}}, ` @{Name = "e-mail"; Expression = {$_.mail;}}, ` @{Name = "Сайт"; Expression = {$_.wWWHomePage;}} ` | convertTo-html ` | out-File c:\temp\usersProperties.html
Теперь уже реализовали и фильтрацию. Будем считать поставленную задачу выполненной.
RSS комментарии
Обратная ссылка