Решим, наконец, поставленную задачу – выгрузим контактные координаты сотрудников из 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

Теперь уже реализовали и фильтрацию. Будем считать поставленную задачу выполненной.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка