Создание допустимых контактов с поддержкой почты без использования специальных командлетов Exchange

Я написал сценарий PowerShell для регулярной обработки и импорта большого (более 70 КБ) количества контактов в среду Exchange. Скрипт работает нормально, но хотелось бы по возможности ускорить его. Раньше наиболее трудоемкими частями были импорт и экспорт данных.

Мне удалось значительно сократить время обработки, удалив большую часть зависимостей от командлетов Exchange 2013. Например, используя «собственный» командлет Get-ADObject для извлечения данных вместо комбинации Get-MailContact и Get-Contact, специфичных для Exchange, я смог сократить время обработки в 10 раз.

Команда выглядит так:

$result = Get-ADObject -LDAPFilter "(objectClass=contact)" -searchBase "$OU"  -ResultPageSize 100 -property GivenName, SN, DisplayName, Department, physicalDeliveryOfficeName , telephoneNumber, mailnickname, targetaddress |  select @{ label="Email"; Expression={ ($_.targetaddress -replace "^SMTP:","").tostring().Tolower().Trim() }}, @{ N="Alias"; E={ $_.mailnickname} }, @{ N="FirstName"; E={ $_.GivenName} }, @{ N="LastName"; E={ $_.SN} }, DisplayName,  @{ N="Office"; E={ $_.physicalDeliveryOfficeName} } , Department, @{ N="Phone"; E={ $_.telephoneNumber} }

Теперь я хотел бы иметь возможность делать наоборот, создавать контакты. То есть создайте контакт с включенной поддержкой почты без использования специальных командлетов Exchange. Мне удалось создать контакт с помощью этой команды:

$Attributes = @{'displayName' = $displayname; 'GivenName' = $first; 'SN' = $last; 'Department' = $department; 'physicalDeliveryOfficeName' = $office; 'telephoneNumber' = $phone; 'mail' = $email; 'mailnickname' = $alias; 'targetaddress' = $email}

New-AdObject -Type Contact -Name $displayname -Path $OU -OtherAttributes $Attributes -whatif

Однако, хотя объект явно создан правильно, он не отображается среди контактов в Exchange. Пока что единственный способ добиться этого - запустить командлет «Enable-MailContact» на объекте после создания, что противоречит цели отказа от использования командлетов Exchange в процессе.

Итак, мой вопрос: кто-нибудь знает, есть ли способ создать функциональный контакт с поддержкой почты, используя только командлет New-ADObject и не полагаясь на специальные командлеты Exchange?

Спасибо.

2
задан 22 December 2015 в 09:48
2 ответа

Оказалось, что важнейшим недостающим элементом является свойство "showinaddressbook".

Эта статья объясняет, как это работает: https://support.microsoft.com/en-us/kb/253828

Атрибут showInAddressBook имеет две цели. Первая заключается в том, чтобы пусть люди видят запись, указанную в списке адресов, с помощью кнопки Клиент Messaging Application Programming Interface (MAPI), такой как Microsoft Outlook. Вторая цель заключается в том, чтобы позволить пользователям "разрешать Имя" на MAPI клиенте

Даже несмотря на то, что статья ссылается на службу обновления получателя (Recipient Update Service - RUS), которая больше не существует со времен Exchange 2007, я думаю, что основной процесс включения почты для объекта все равно остается тем же. Итак, по сути, для создания контакта, включающего почту, без использования команд Exchange 2013 я сделал нечто подобное:

$alias = "ADDR-00001"
$email = "jdoe@somewhere.com"
$first = "Joe"
$last = "Doe"
$displayname = "DOE Joe"
$department = "My Dept."
$office = "My Office"
$phone = "55554448934"
$proxyAddresses = "SMTP:jdoe@somewhere.com"
$DestinationOU = "OU=contact,OU=example,DC=corp,DC=example,DC=com"
$AddressBook = "CN=Default Global Address List,CN=All Global Address Lists,CN=Address Lists Container,CN=Example-Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=example,DC=com","CN=All Contacts,CN=All Address Lists,CN=Address Lists Container,CN=Example-Org,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=corp,DC=example,DC=com"

$Attributes = @{'displayName' = $displayname; 'GivenName' = $first; 'SN' = $last; 'Department' = $department; 'physicalDeliveryOfficeName' = $office; 'telephoneNumber' = $phone; 'mail' = $email; 'mailnickname' = $alias; 'targetaddress' = $email; 'proxyAddresses' = $proxyAddresses; 'showinaddressbook' = $AddressBook;}

New-AdObject -Type Contact -Name $displayname -Path $DestinationOU -OtherAttributes $Attributes

результирующий объект все еще не имеет значения LegacyExchangeDN, и у него есть своеобразная ExchangeVersion, но свойство AddressListMemberhip теперь заполнено.

Get-Mailcontact "jdoe@somewhere.com" | select displayName, RecipientType, LegacyExchangeDN, ExchangeVersion, AddressListMembership| fl

DisplayName           : DOE Joe
RecipientType         : MailContact
LegacyExchangeDN      :
ExchangeVersion       : 0.0 (6.5.6500.0)
AddressListMembership : {\All Contacts, \Default Global Address List}
2
ответ дан 3 December 2019 в 10:40

Думаю, атрибут proxyAddresses отсутствует. Вы можете проверить его в AD Users and Computers, чтобы увидеть атрибуты, которые были добавлены атрибутом Enable-MailContact.

1
ответ дан 3 December 2019 в 10:40

Теги

Похожие вопросы