===== Работа с внешними контактами ===== Внешние контакты в //Exchange// - это отдельные объекты //AD// без внутреннего логина. Данные контакты могут иметь адреса электронной почты, которые в целом в рамках //Exchange//-сервера будут восприниматься как ВНЕШНИЕ пользователи. К примеру, ничего не мешает добавить эти учётные записи с типом "контакт" в группу рассылки. Однако в случае, если группа рассылки разрешает получение почты только от отправителей в рамках организации, то письма, полученные от контактов, добавленных в группу, приниматься сервером не будут. Если нам необходимо изменить это поведение, то политику отправки группы рассылки необходимо пересмотреть. ==== Автоматизация создания большого количества контактов из CSV ==== Если нам требуется массово создать большое количество контактов в AD, то автоматизировать процесс не слишком сложно. Представим, что у нас есть CSV-файл, содержащий имя, должность и email контактов. name,title,email Иван Иванов,Менеджер,ivan@example.com Петр Петров,Директор,petr@example.org Скрипт, который массово создаст контакты из CSV-файла, путь к которому указан в переменной //$CsvPath// в OU, DN которого содержится в //$OU//, будет выглядеть так: $CsvPath = "C:\Temp\contacts.csv" $OU = "OU=TestContacts,OU=Contacts,DC=domain,DC=local" $Contacts = Import-Csv -Path $CsvPath -Delimiter "," -Encoding UTF8 foreach ($Contact in $Contacts) { if ([string]::IsNullOrWhiteSpace($Contact.name) -or [string]::IsNullOrWhiteSpace($Contact.email)) { Write-Warning "Пропущена запись: отсутствует name или email." continue } $DisplayName = "$($Contact.name.Trim()) (Внешний контакт)" $Email = $Contact.email.Trim() $Title = $Contact.title.Trim() try { Write-Host "Создание контакта: $DisplayName <$Email>" New-MailContact ` -Name $DisplayName ` -DisplayName $DisplayName ` -ExternalEmailAddress $Email ` -OrganizationalUnit $OU ` -ErrorAction Stop if (-not [string]::IsNullOrWhiteSpace($Title)) { Set-Contact ` -Identity $DisplayName ` -Title $Title ` -ErrorAction Stop } Write-Host "Создан: $DisplayName" } catch { Write-Warning "Ошибка при создании '$DisplayName': $($_.Exception.Message)" } } :!: Скрипт необходимо выполнять в //EMS// на сервере //Exchange//. Теперь мы можем массово добавить созданные контакты в какую-либо группу рассылки: Get-MailContact -OrganizationalUnit "OU=TestContacts,OU=Contacts,DC=domain,DC=local" | ForEach-Object { Add-DistributionGroupMember -Identity "TestDistrGroup" -Member $_.Identity } Возможно, мы не хотим, чтобы созданные контакты появлялись в глобальной адресной книге //Exchange//. Тогда необходимо массово установить для них соответствующий флаг //HiddenFromAddressListsEnabled//. Сделаем это следующим образом: Get-MailContact -OrganizationalUnit "OU=TestContacts,OU=Contacts,DC=domain,DC=local" | Set-MailContact -HiddenFromAddressListsEnabled $true {{tag>Exchange Microsoft Mail PowerShell ActiveDirectory}}