Статья размещена автором Бетке Сергей Сергеевич

PowerShell: выгружаем телефонную книгу

Выделил сценарий для выгрузки в .csv телефонного справочника. В связи с задачей по дисклаймерам, пришлось обновить сценарий, заодно – и статью обновляю.

Реализуем выгрузку по примеру статей “Собственно выгрузка контактных координат сотрудников из AD” и “Корректируем инициалы всех сотрудников в AD средствами powershell”. Если Вы ранее не использовали командлеты ADpowershell, рекомендую предварительно прочитать статью “Установка и первый опыт ADpowershell на Windows Server 2003”.

<# 
    .Synopsis 
        Выгрузка телефонной книги в .csv файл. 
    .Description 
        Выгружаем телефонную книку в .csv файл. Используем для построения книги атрибут telephoneNumber. 
    .Parameter searchBase 
        OU, с которой будет осуществляться выгрузка телефонной книги в .csv 
    .Parameter filter 
        Фильтр для отбора учётных записей для телефонной книги 
    .Parameter csvFile 
        Полный путь к файлу, в который будем выгружать 
    .Example 
        Выгружаем всю телефонную книгу по умолчанию 
  
        .\ExportPhonesBook.ps1
#> 
  
param ( 
    [Parameter( 
        Mandatory=$false, 
        Position=0, 
        ValueFromPipeline=$false, 
        HelpMessage="OU, с которой будет осуществляться выгрузка телефонной книги в .csv"
    )] 
    [string] 
    $searchBase = 'OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru',
    [Parameter( 
        Mandatory=$false, 
        Position=1, 
        ValueFromPipeline=$false, 
        HelpMessage="Фильтр для отбора учётных записей для телефонной книги."
    )] 
    [string] 
    $filter = {name -notlike 'ПЯ*'}, 
    [Parameter( 
        Mandatory=$true, 
        Position=2, 
        ValueFromPipeline=$false, 
        HelpMessage="Полный путь к файлу, в который будем выгружать."
    )] 
    [string] 
    $csvFile
) 
  
import-module ActiveDirectory 

Get-ADUser `
    -Filter $filter `
    -SearchBase $searchBase `
    -SearchScope Subtree `
    -Properties `
        cn, displayName, telephoneNumber `
    | select-object `
        -property `
            @{Name = "ФИО"; Expression = {$_.displayName;}}, `
            @{Name = "Телефон"; Expression = {$_.telephoneNumber}} `
    | sort-object `
        -property ФИО `
    | export-csv `
        $csvFile `
        -encoding 'UTF8' `
        -force

Итак, телефонную книгу в .csv мы выгрузили для проверки и корректировки. Теперь его можно грузить в excel или ещё куда для дальнейшей обработки.

А теперь расширим выгрузку, чтобы проверить и скорректировать все атрибуты, которые потребуются в дисклаймере (подписи):

<# 
    .Synopsis 
        Выгрузка телефонной книги в .csv файл. 
    .Description 
        Выгружаем телефонную книку в .csv файл. Используем для построения книги атрибут telephoneNumber. 
    .Parameter searchBase 
        OU, с которой будет осуществляться выгрузка телефонной книги в .csv 
    .Parameter filter 
        Фильтр для отбора учётных записей для телефонной книги 
    .Parameter csvFile 
        Полный путь к файлу, в который будем выгружать 
    .Example 
        Выгружаем всю телефонную книгу по умолчанию 
  
        .\ExportPhonesBook.ps1 -csvFile 'c:\temp\phoneBook.csv'
#> 
  
param ( 
    [Parameter( 
        Mandatory=$false, 
        Position=0, 
        ValueFromPipeline=$false, 
        HelpMessage="OU, с которой будет осуществляться выгрузка телефонной книги в .csv"
    )] 
    [string] 
    $searchBase = 'OU=Группа Компаний ГАРО,OU=Персонал,OU=Предприятия,OU=iTg,DC=novgaro,DC=ru',
    [Parameter( 
        Mandatory=$false, 
        Position=1, 
        ValueFromPipeline=$false, 
        HelpMessage="Фильтр для отбора учётных записей для телефонной книги."
    )] 
    [string] 
    $filter = {name -notlike 'ПЯ*'}, 
    [Parameter( 
        Mandatory=$true, 
        Position=2, 
        ValueFromPipeline=$false, 
        HelpMessage="Полный путь к файлу, в который будем выгружать."
    )] 
    [string] 
    $csvFile
) 
  
import-module ActiveDirectory 

Get-ADUser `
    -Filter $filter `
    -SearchBase $searchBase `
    -SearchScope Subtree `
    -Properties `
        cn `
        ,displayName `
        ,company `
        ,department `
        ,title `
        ,manager `
        ,otherTelephone `
        ,mobile `
        ,telephoneNumber `
        ,facsimileTelephoneNumber `
        ,mail `
        ,wWWHomePage `
| select-object `
    -property `
        @{Name = "ФИО"; Expression = {$_.displayName;}} `
        ,@{Name = "Организация"; Expression = {$_.company}} `
        ,@{Name = "Подразделение"; Expression = {$_.department}} `
        ,@{Name = "Должность"; Expression = {$_.title}} `
        ,@{Name = "Руководитель"; Expression = {(Get-ADObject -Identity $_.manager -properties cn, displayName).displayName}} `
        ,@{Name = "Телефон"; Expression = {$_.otherTelephone}} `
        ,@{Name = "Мобильный"; Expression = {$_.mobile}} `
        ,@{Name = "Внутренний"; Expression = {$_.telephoneNumber}} `
        ,@{Name = "Факс"; Expression = {$_.facsimileTelephoneNumber}} `
        ,@{Name = "E-mail"; Expression = {$_.mail}} `
        ,@{Name = "Web-сайт"; Expression = {$_.wWWHomePage}} `
| sort-object `
    -property ФИО `
| export-csv `
    $csvFile `
    -encoding 'UTF8' `
    -useCulture `
    -NoTypeInformation `
    -force

Как видно, всё просто.

Отзывы » (5)

  1. Carlo:

    Спасибо за примеры, очень помогло.

  2. Никита П:

    Спасибо помогли с export-csv -useCulture и -encoding ‘UTF8′

  3. Александр:

    Спасибо!А есть пример напрямую загрузки данных в БД MySQL на удаленном сервере?т.е. у меня есть serv1 — АД, и serv2 — MySQL server. Могу я скриптом напрямую выгрузить данные из AD в bd MySQL скажем Users в таблицу ofUsers ?

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

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

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