Экспорт — импорт контактов через CSV файл

Наверняка многие сталкивались с задачей массового создание большого количества контактов в организации, например, в случае, когда объединяются 2 компании или налаживают тесные партнерские отношения. Перед ИТ, в этой ситуации, встает задача организовать взаимный обмен почтовыми контактами сотрудников, партнерских организаций, обеспечив их отображение в адресных книгах Outlook.
Один из наиболее простых способов организации подобного обмена, это выгрузка списка активных почтовых ящиков и значимых полей в своей организации в CSV-файл, и передача его партнерской организации, и, в свою очередь, получение аналогичного CSV-файла от компании партнера, и импортирование его в свою почтовую организацию.

Здесь умышленно не рассматриваются варианты обмена контактами и синхронизации адресных книг средствами решений от Microsoft MIIS/ILM/FIM или Collaboration Services от Quest Software и им подобным.

Итак, задача состоит из трех этапов:

  1. Общее соглашение о списке полей, которыми будет осуществляться обмен;
  2. Экспорт списка почтовых ящиков с дополнительными полями в CSV файл (с последующей передачей в компанию-партнер);
  3. Импорт данных из CSV файла в AD (полученный из компании партнера).

Общее соглашение о списке полей

Список полей, которыми могут обмениваться, может быть самым разным, все зависит от требований бизнес-процесса, но, тут можно выделить список полей, которыми наверняка будут обмениваться все компании:

  • ФИО
  • Логин
  • Email
  • Должность
  • Телефон
  • Имя компании

Имя компании необходимо если подобный обмен вы осуществляете одновременно с несколькими компаниями
Перечисленным полям соответствуют следующие атрибуты учетной записи AD:

  • Name;
  • SamAccountName;
  • Mail;
  • Title;
  • OfficePhone;
  • Company

В итоге, мы ожидаем, что CSV-файлы, которыми будет осуществляться обмен, будет выглядеть следующим образом:

Name;SamAccountName;Mail;Title;OfficePhone;Company
Иванов Иван Иванович;i.ivanov;i.ivanov@mail.ru;инженер;1001;ООО Ромашка
Петров Петр Петрович;p.petrov;p.petrov@gmail.com;архитектор;1002;ЗАО Русский лес
Сидоров Сидор Сидорович;s.sidorov;s.sidorov@ya.ru;Руководитель;1000;ОАО Баня

Экспорт списка почтовых ящиков

Процесс экспорта заключается в:

  1. получении списка необходимых ящиков Exchange, при помощи командлета:

Get-Mailbox -OrganizationalUnit "<Domain name>/<OU Name>"

  1. запросе аттрибутов пользователя из AD посредством командлета:

$mailbox.SamAccountName | Get-ADUser -Properties *

  1. Формировании массива данных, через:

$Contact = new-object -TypeName PSObject
$Contact | Add-Member -MemberType NoteProperty -Name FIO -Value $User.DisplayName

  1. Выгрузке массива в CSV-файл

$ListContacts | Export-Csv -Path "C:\Temp\ListContact.csv" -NoTypeInformation -Delimiter ";"

Полные текст скрипта экспорта списка ящиков в CSV-файл с комментариями:

# Подгружаем набор командлетов
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
# Описываем массив для данных
$ListContacts = @();
# выгружаем список почтовых ящиков из конкретной OU или всего домена (можно также указать дополнительные фильтры при необходимости)
$ListEmplMailbox = Get-Mailbox -OrganizationalUnit "<Domain name>/<OU Name>"
# Формируем массив ящиков с необходимыми полями
Foreach ($mailbox in $ListEmplMailbox ){
	# Запрашиваем атрибуты из учетки в AD
	$User = $mailbox.SamAccountName | Get-ADUser -Properties *
	$Contact = new-object -TypeName PSObject
	#ФИО
	$Contact | Add-Member -MemberType NoteProperty -Name FIO -Value $User.DisplayName
	#Alias как правило совпадает с SamAccountName
	$Contact | Add-Member -MemberType NoteProperty -Name Alias -Value $mailbox.Alias
	#email
	$Contact | Add-Member -MemberType NoteProperty -Name Email -Value $User.EmailAddress
	#должность
	$Contact | Add-Member -MemberType NoteProperty -Name Title -Value $User.Title
	#Телефон
	$Contact | Add-Member -MemberType NoteProperty -Name Phone -Value $User.telephoneNumber
	#Компания
	$Contact | Add-Member -MemberType NoteProperty -Name Company -Value "ООО Адреналин"
	$ListContacts += $Contact
}
# Выгружаем массив в файл
$ListContacts | Export-Csv -Path "C:\Temp\ListContact.csv" -NoTypeInformation -Delimiter ";"

 

Импорт данных из CSV файла в AD

Процесс импорта данных заключается в

  1. Импортировании CSV файла через

$ListContacts = Import-Csv .\contacts.csv -Delimiter ";"

  1. Проверк и не создавался ли такой контакт ранее:

if ($Contact.Mail -eq $ExistContact.WindowsEmailAddress) {$Contact_Exist = $true }

  1. Непосредственное создание контакта

New-MailContact -Name $Contact.Name -DisplayName $Contact.Name -LastName $io -FirstName $fio[0] -Alias $MailNickName -OrganizationalUnit "<Domain name>/<OU Name>" -ExternalEmailAddress $Contact.Mail

  1. Установка значений атрибутов, которые нет возможности указать при создании контакта:

Set-Contact -Identity $newcontact.Identity -Company $Contact.Company -Title $Contact.Title -Phone $contact.OfficePhone

Текст скрипта создания контактов на основе CSV-файла с комментариями:

# Подгружаем набор командлетов
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
# Указываем файл из которого брать информацию о контактах
Set-Location "C:\Temp"
$ListContacts = Import-Csv .\contacts.csv -Delimiter ";" #| select -First 40
# Загружаем имеющиеся в AD контакты
$ListExistContacts = Get-Contact
# начинаем создание контактов
foreach ($Contact in $ListContacts)
{
	$Contact_Exist = $null
	# Проверяем существует ли такой контакт
	foreach ($ExistContact in $ListExistContacts)
	{
		if ($Contact.Mail -eq $ExistContact.WindowsEmailAddress) {$Contact_Exist = $true }
	}
	if ($Contact_Exist) {"Контакт существует: " + $Contact.Name }
	else
	{
		# Если такого контакта нет, то создаем его
		# парсим строку с ФИО на массив Фамилия Имя Отчетство
		# $fio[0] - Фамилия
		# $fio[1] - Имя
		# $fio[2] - Отчество
		$fio = $Contact.Name -split " "
		$io = $fio[1] + " " + $fio[2]
		# Дописываем префикс, чтобы не попасть в имеющиеся алиасы
		$MailNickName = $Contact.SamAccountName + "_contact"
		# Создаем контакт
		$newcontact = New-MailContact -Name $Contact.Name -DisplayName $Contact.Name -LastName $io -FirstName $fio[0] -Alias $MailNickName -OrganizationalUnit "<Domain name>/<OU Name>" -ExternalEmailAddress $Contact.Mail
		# Дописываем в созданном контакте компанию должность и телефон
		Set-Contact -Identity $newcontact.Identity -Company $Contact.Company -Title $Contact.Title -Phone 		$contact.OfficePhone
		$newcontact.Identity
	}
}

Добавить комментарий