пятница, 17 февраля 2017 г.

[Exchange] Права полного доступа к чужому почтовому ящику. Атрибут MsExchDelegateListLink.

В Exchange 2010 после того, как вы назначили пользователю права полного доступа Manage Full Access Permission к почтовому ящику другого пользователя, почтовый ящик появляется, как правило, после перезапуска Outlook или в течение пары минут. 

После того как вы удалили право доступа, почтовый ящик (по идее) должен автоматически исчезнуть, но бывает, что этого не происходит.

Разгадка кроется в AD-атрибуте MsExchDelegateLinkList той учетной записи, к почтовому ящику которой был предоставлен доступ. Он содержит информацию о FQDN-именах учетных записей, которые имеют полный доступ к этому почтовому ящику.

Почему-то (камень в огород Microsoft) этот атрибут не всегда обнуляется, поэтому нам придется делать это самим.

1. Предоставляем полный доступ TestUser к почтовому ящику User:

Get-Mailbox User | Add-MailboxPermission -User TestUser -AccessRights FullAccess -InheritanceType All

2. Удаляем право доступа:

Get-Mailbox User | Remove-MailboxPermission -User TestUser -AccessRights FullAccess -InheritanceType All

3. Проверяем, очистился ли атрибут MsExchDelegateListLink у пользователя User:

Get-ADuser User -Properties MsExchDelegateListLink | Select MsExchDelegateListLink

4. Удаляем FQDN-имя пользователя TestUser из атрибута MsExchDelegateListLink учетной записи User:

$fqdn = Get-ADUser TestUser | Select -ExpandProperty DistinguishedName
Get-ADUser User -Properties msExchDelegateListlink  | Set-ADUser -Remove @{msExchDelegateListlink=$fqdn}

Также можно полностью очистить атрибут msExchDelegateListlink любого пользователя:

Set-ADUser UserName -Clear msExchDelegateListlink

или всех пользователей домена:

Get-ADUser | Set-ADUser -Clear msExchDelegateListlink

среда, 15 февраля 2017 г.

[Mikrotik] Групповое удаленное изменение паролей учетных записей роутеров

Допустим, у нас есть 10 маршрутизаторов Mikrotik. Необходимо раз в неделю менять пароли для учетных записей. Желательно делать это автоматически.
 
Для решения данной задачи мы будем использовать утилиту plink (скачать).
 
Она позволяет произвести ssh-подключение к маршрутизатору и выполнить удаленную команду.
 
Предварительно создадим текстовый файл change_pwd.txt с командой изменения пароля. В нашем примере это учетная запись support, ей назначается пароль password и она находится в группе custom.
 
/USER SET support PASSWORD=password GROUP=custom
 
Далее выполним команду в командной строке:

plink -ssh admin@192.168.0.1 -pw admin_pwd -m "change_pwd.txt"

В этой команде пользователь admin с паролем admin_pwd подключается к маршрутизатору Mikrotik с IP-адресом 192.168.0.1 и запускает команды из текстового файла change_pwd.txt.

Если у вас несколько серверов, то можно написать сценарий:

например:

@echo off
cls
cd C:\Plink
plink -ssh admin@192.168.0.1 -pw admin_pwd -m "change_pwd.txt"
plink -ssh admin@10.0.0.1 -pw admin_pwd -m "change_pwd.txt"
plink -ssh admin@172.16.0.1 -pw admin_pwd -m "change_pwd.txt"
plink -ssh admin@10.10.10.1 -pw admin_pwd -m "change_pwd.txt"
plink -ssh admin@192.168.200.254 -pw admin_pwd -m "change_pwd.txt"
pause

Можно использовать переменные, PowerShell и т.д. Скрипт можно поставить в планировщик задач на выполнение, новый пароль будет генерироваться и записываться в какой-нибудь источник. В общем, дальнейшие шаги зависят только от вашей фантазии.

Как разрешить пользователям управлять определенными виртуальными машинами, не предоставляя полномочий администратора

Сценарий: вы - системный администратор крупной компании с десятком многоядерных серверов с Hyper-V 2012 R2 и несколькими десятками виртуальных машин. Вы собираетесь в отпуск и вам необходимо, чтобы в ваше отсутствие ваш подчиненный специалист техподдержки или программист могли управлять некоторыми виртуальными машинами на уровне Hyper-V, останавливать их, запускать, ставить на паузу, добавлять ресурсы и пр.

Цель: осуществить вышеуказанные требования, не предоставляя права Hyper-V администратора, т.е. пользователь должен остаться пользователем, должен видеть и управлять только теми виртуальными машинами, которые вы ему назначите, не иметь административный доступ на сервер с Hyper-V.

Решение: использовать программный продукт System Center Virtual Machine Manager 2012 R2.

Для начала последовательно расскажу немного об установке SCVMM.

1. Система не ставится на Windows Server 2008 (R2). На старую версию можно поставить только консоль управления. Ставим на 2012 (R2), на отдельную виртуальную машину. Не ставим SCVMM на гипервизор!
2. Ставим Microsoft .NET Framework 4 или выше.
3. Перед установкой SCVMM установите следующие компоненты из пакета Windows ADK 8.1:



















4. Установите SQL Server 2008 R2 или выше (SQL Server Express не подойдет)
5. Установите SQL Server 2008 R2 Command Line Utilities (или 2012). Если откроете ссылку отсюда не нажимайте кнопку скачать, а перематывайте к середине страницы.
6. Запускаем установщик SCVMM. там все просто. Но бывает, что при установке SCVMM продолжить ее невозможно до тех пор, пока компьютер не будет перезагружен. Перезагрузка не помогает. В этом случае удалите следующий ключ реестра: HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations.

Далее заходим в SCVMM, и для решения нашей задачи выполняем последовательно следующие действия (я не буду подробно описывать действия ввиду несложности процесса:

1. Добавляем наши хосты (наши сервера виртуализации Hyper-V). Здесь все просто и нет ничего сложного:
VMs and Services > All Hosts > Add Hyper-V Hosts and Clusters

2. Создаем облако:
VMs and Services > Clouds  > Create Cloud. Здесь нас интересуют вкладки Resources и Library. В первой мы задаем ресурсы нашего облака (отмечаем All Hosts), во второй просто выбираем библиотеку MSSCVMMLibrary нашего сервера, чтобы она появилась во вкладке. Параметры в остальных вкладках мы оставляем по умолчанию и не трогаем.

3. Далее создаем роль для наших пользователей:
Settings > Security > User Roles > Create User Role

a) во вкладке Profile выбираем Application Administrator (Self-Service Users)
b) во вкладке Members назначаем пользователей или группу (рекомендую)
с) во вкладке Scope отмечаем облако, которое мы создали
в) во вкладке Permissions выбираем наше облако и отмечаем те операции, которые будут выполнять наши пользователи, например Start, Stop, Pause and resume, Shut down.

Далее нам необходимо зайти в свойства каждой виртуальной машины, которой будут управлять наши пользователи и задать ассоциацию с нашим облаком. Делается это во вкладке General > Cloud в свойствах виртуальной машины (список виртуальных машин представлен во вкладке VMs and Services > All Hosts.

Основные шаги по решению нашей задачи закончены. Теперь осталось последнее: нужно назначить созданную нами роль каждой виртуальной машине нашего облака.

Для этого мы будем использовать PowerShell.

1. Назначаем переменную-список виртульных машин, ассоциированных с нашим облаком:

$VMs = Get-SCVirtualMachine | ? {$_.Cloud -eq (Get-SCCloud "TestCloud")}

2. Назначаем переменную-роль, которую мы создали для наших пользователей:

$Role = Get-SCUserRole -Name "TestRole"

3. Назначаем нашу роль и владельца DOMAIN\TestUsers этим виртуальным машинам:

$VMs | ForEach {Set-SCVirtualMachine -VM $_ -UserRole $Role -Owner "DOMAIN\TestUsers"}

Теперь пользователь, зайдя по RDP на сервер SCVMM под обычным пользователем удаленного рабочего стола и запустив консоль управления SCVMM, увидит в облаке все эти виртуальные машины и сможет управлять ими так, как ему позволяет это делать роль, которую мы создали. Так же можно установить консоль управления SCVMM на любую рабочую станцию или терминальный сервер, где работают пользователи. Есть также вариант публикации RD Web Access

вторник, 17 января 2017 г.

[Asterisk] Отстает или убегает время в Elastix

Если Elastix запущен в качестве виртуальной машины на сервере виртуализации Hyper-V, то возникает проблема синхронизации времени. Отключение в свойствах виртуальной машины опции Time Synchronization не помогает. На помощь приходит Google.
 
Нужно отредактировать следующие файлы:

1. /boot/grub/grub.conf нужно добавить строки:
 
divider=10 clocksource=acpi_pm (для 32-бит)
notsc divider=10 (для 64-бит)

2. /etc/ntp.conf

tinker panic 0
restrict 127.0.0.1
restrict default kod nomodify notrap
server 0.ru.pool.ntp.org

server 1.ru.pool.ntp.org
server time.yandex.ru
driftfile /var/lib/ntp/drift

также в этом файле нужно закомментировать строки:

server 127.127.1.0
fudge 127.127.1.0 stratum 10


3. /etc/ntp/step-tickers

0.ru.pool.ntp.org
1.ru.pool.ntp.org

Далее выполнить команды в командной строке Asterisk:

ntpd -q (синхронизировать время)

hwclock --systohc (синхронизировать машинное время)

chkconfig ntpd on (запускать автоматически сервис синхронизации времени)

reboot (перезагрузка Asterisk)

пятница, 13 января 2017 г.

[Asterisk] Периодически отваливаются IAX2-транки со статусом UNREACHABLE

Использую Elastix 2.5.0-8, но думаю, что проблема общая. Команда
iax2 reload не помогает. Опытно-поисковым путем найдено два решения:

1. В свойствах транка в графе Peer Details определяем параметр qualify=no.
Данное решение не потребует от вас дальнейшего участия.

2. последовательно вводим команды в Asterisk-Cli:

module unload chan_iax2.so
module load chan_iax2.so
iax2 reload
iax2 show peers

Данный метод - временное решение проблемы.

четверг, 12 января 2017 г.

Восстановление доверительных отношений рабочей станции и домена

Иногда после долгого времени неиспользования или случайной ошибки сисадмина "слетают" доверительные отношения в домене. В этом случае заходим на сервер или рабочую станцию под локальной учетной записью Администратора и выполняем команду с повышенными привилегиями:
 
Netdom resetpwd /Server:DC /UserD:DOMAIN\user /PasswordD:pwd,
 
где DC - сетевое имя контроллера домена
DOMAIN\user и pwd  - учетные данные администратора домена
 
В PowerhShell это делается командой:
 
Reset-ComputerMachinePassword -Server DC -Credential DOMAIN\user

четверг, 29 декабря 2016 г.

[Команда индусов] Черти-программисты из Microsoft издеваются над Windows

Сюда я буду помещать заметки о дурацких выходках разработчиков Microsoft.

1. Если у вас на терминальном сервере отключено перенаправление дисков (Drive Redirection), то перенаправление буфера обмена не будет полностью функционировать. Будет работать только копирование/вставка текста. Файлы и папки нельзя будет копировать между удаленной и локальной сессиями. В Server 2008 (R2) было всё нормально.

2. Диспетчер задач (Task Manager). Почему убрали групповое выделение (multiselect) сессий пользователей? Да и вообще во всех вкладках (процессы). Хотя в службах групповое выделение есть, но нельзя ничего сделать! Ну не дебилы?

3. Удаленные сессии в диспетчере сервера (Server Manager\Remote Desktop Services\Collections\Connections). Также убрано групповое выделение (multiselect) сессий. Нельзя послать сообщение многим, завершить работу сразу нескольких пользователей.

4. Проводник (Explorer). Из статус-панели убрана дата модификации файла. Чтобы посмотреть дату, нужно или включить вид таблицы или зайти в свойства файла. Дуралеи!

5. Проводник (Explorer). Сортировка по дате видеофайлов происходит очень медленно. Не верите? Проверьте. Есть решение. В предыдущих версиях было мгновенно.

6. В Windows 10 если вы блокируете рабочий стол, затем неверно набираете пароль 2 раза, возникает окно, что пароль набран неверно, а фокус с этого окошка исчезает, и вам необходимо использовать мышь или клавишу Tab, чтобы нажать OK. Это идиотизм! Банальная недоработка.

P.S. Создается впечатление, что в Microsoft сидят какие-то зловреды. Ребята-программисты! Никогда не забывайте про групповые операции. Вы не поверите, но проводник и поиск в Windows 95/98 был много эффективней, чем сейчас. Поиск так вообще был сказкой!

 

вторник, 27 декабря 2016 г.

Ошибка "Printer settings could not be saved" при смене драйвера сетевого принтера

Иногда возникает такая ошибка при попытке сменить драйвер принтера на сервере печати.

Чтобы сменить драйвер принтера и избежать такой ошибки, нужно отключить общий доступ к принтеру (Printer Sharing), сменить драйвер принтера, затем снова включить общий доступ.

понедельник, 26 декабря 2016 г.

[VHD] Делаем запуск чистой системы с VHD-образа Windows

Я не буду подробно рассказывать, как создать VHD-образ (или VHDX-образ) системы. Лично я "поднимаю виртуалку" на сервере Hyper-V, накатываю на нее обновления, устанавливаю нужный софт, делаю необходимые настройки и запускаю Sysprep.

С недавних пор я стал ставить друзьям и знакомым системы, которые запускаются с VHD-образа. Я не буду вдаваться в подробности преимуществ и недостатков этого метода, для меня самый главный плюс - быстрота установки и возможность переноса системы на другой физический диск за считанные минуты (плюс резервное копирование образа).

Итак, чистая система, один физический жесткий диск.

1. Копируем на флэшку VHD-образ и загружаемся с любого загрузочного диска Windows/WinPE.
2. Открываем командную строку (Shift+F10) и вводим последовательно команды:

diskpart
  select disk 0
  clean
  create partition primary
  active
  format fs=ntfs label=HDD quick
  assign letter=K
  exit

copy /y /z E:\Win81.vhdx K:\Win81.vhdx
diskpart
  select vdisk file=K:\Win81.vhdx
  attach vdisk
  select partition 1 (2, если у вас образ со скрытым разделом загрузки)
  assign letter=L
  exit
bcdboot L:\Windows /s K:\
wpeutil reboot

Теперь по порядку: что же произошло?

1. Первый блок команд diskpart создал на нашем диске единственный загрузочный раздел для нашей системы (можно также создать скрытый раздел для файлов загрузки) и назначил метку K: логическому диску.
2. Копирование VHD-образа на вновь созданный логический диск.
3. Второй блок команд diskpart монтирует VHD-образ и назначает метку L: виртуальному тому.
4. Копирование загрузочных файлов с помощью утилиты bcdboot с виртуального тома L: на логический загрузочный диск K:.
5. Перезагрузка установщика Windows/WinPE.

Блоки diskpart можно оформить в файлы сценариев (создать текстовый файл с блоками командам) и запускать с помощью diskpart /s script_name.

Таким образом, можно автоматизировать процесс, что я и сделал, написав простейший bat-файл:

diskpart /s win81_1.txt
copy /y /z E:\Win81.vhdx K:\Win81.vhdx
diskpart /s win81_2.txt
bcdboot L:\Windows /s K:\
wpeutil reboot

где win81_1.txt и win81_2.txt - сценарии diskpart 

P.S. В процессе установки я столкнулся с ошибкой VHD_BOOT_HOST_VOLUME_NOT_ENOUGH_SPACE, возникающей тогда, когда на физическом диске (разделе) меньше пространства, чем раздел виртуального образа VHD. Для решения нужно уменьшить (shrink) размер VHD-образа в Hyper-V Manager или сторонних утилитах. Учтите, вы не сможете этого сделать, если размер раздела установленной системы в VHD-образе превышает раздел физического жесткого диска. Т.е. нужно:
1. подмонтировать VHD-образ
2. открыть оснастку Управление дисками (diskmgmt.msc)
3. проверить размер раздела, при необходимости сжать
4. отмонтировать VHD-образ
5. открыть Hyper-V Manager и сделать уменьшение диска

вторник, 20 декабря 2016 г.

[Exchange] Команды для получения информации о доступах пользователей к почтовым ящикам

Получаем информацию о пользователях, имеющих право отправки писем от имени других учетных записей:

Get-Mailbox -ResultSize Unlimited | Get-ADPermission | ? {($_.ExtendedRights -like "*Send-As*") -and ($_.User -notlike "NT AUTHORITY\SELF")} | select User, Identity | sort User

Получаем информацию о пользователях, имеющих полный доступ к почтовым ящикам других пользователей:

Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | ? {$_.User.ToString() -ne "NT AUTHORITY\SELF" -and $_.IsInherited -eq $False} | select User, Identity | ? {$_.Identity -notlike '*DiscoverySearchMailbox*'} | sort User

среда, 30 ноября 2016 г.

[Exchange] Ошибки при выпуске сертификатов 0x8007000d, 0x80094801

В этот пост я буду добавлять всевозможные ошибки, связанные с сертификатами, а также пути их решения.


1. Создаем в Exchange 2010 запрос на новый сертификат Сохраняем запрос в файл cert.req. При попытке импорта запроса на выпуск сертификата для Exchange-сервера на сервере сертификации (Certification Authority, CA) получаем следующую ошибку:





Решение простое: мы сохранили файл cert.req в кодировке Unicode. Нужно пересохранить файл в кодировке ANSI.


2. При попытке импорта запроса на выпуск сертификата для Exchange-сервера на сервере сертификации (CA) получаем следующую ошибку:





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


certreq -submit -attrib "CertificateTemplate: WebServer" cert.req

среда, 9 ноября 2016 г.

[Exchange] При заходе пользователя в OWA открывается пустая страница

С недавних пор на Exchange 2007 стала появляться пустая страница после залогинивания пользователя в Outlook Web Access (выглядит так: https://mail.com/owa/auth.owa).
Решение оказалось довольно простым: нужно убедиться, что запущена служба Microsoft Exchange Forms-Based Authentication (MSExchangeFBA).

четверг, 3 ноября 2016 г.

[Registry] Как на Hyper-V Server отключить CD/DVD-ROM

Всем известно, что в core-версиях Windows Server отсутствуют оснастки для администрирования, а стало быть и диспетчер устройств.


Необходимость отключения CD/DVD-ROM возникла при удаленной установке Truecrypt - эта программа требует записать образ восстановления на CD/DVD. В случае наличия работающего CD/DVD-привода на сервере продолжение установки программы невозможно, пока запись на носитель не будет произведена.


Для обхода просто отключаем привод в устройствах. В core-версиях Windows Server делаем это через реестр:


reg add HKLM\System\CurrentControlSet\Services\cdrom /t REG_DWORD /v "Start" /d 4 /f
Чтобы включить обратно, меняем 4 на 1.


После этого делаем перезагрузку сервера, и тогда Truecrypt выдаст следующее окно:





Выбираем первый пункт, он позволит сохранить образ восстановления на жесткий диск и продолжить установку.


P.S. Справедливости ради надо отметить, что для успешной установки/шифрования системного диска Truecrypt достаточно удалить у CD/DVD-привода букву устройства (drive letter), в core-версиях Windows Server это можно сделать с помощью команды diskpart (list volume, select volume #, remove). Или использовать параметр /noisocheck при запуске утилиты Truecrypt Format.

суббота, 9 апреля 2016 г.

[DNS] Форсирование репликации DNS-зоны между сайтами Active Directory

Иногда требуется, чтобы клиенты удаленного сайта Active Directory оперативно получали обновленные DNS-записи ресурсов на свой контроллер домена (DNS-сервер с интегрированной зоной Active Directory). Как правило, по умолчанию это время составляет не менее 15 минут. А что же делать, если работа не терпит отлагательств?

Для этого выполняем всего лишь две команды, первая из которых инициирует межсайтовую репликацию, а другая - вносит обновления в базу данных Active Directory.

repadmin /syncall RECIPIENT-DC dc=DomainDnsZones,dc=TEST,dc=INT /d /e
dnscmd /zoneupdatefromds TEST.INT



Обновленные DNS-записи ресурсов после выполнения данных команд становятся доступными в течение нескольких секунд. На клиентах нужно также обнулить кэш DNS, перезапустив службу DNS-клиента, или выполнив ipconfig /flushdns с правами администратора.


среда, 23 марта 2016 г.

[PowerShell] Если забыл проставить фамилию и имя пользователям в службе каталогов Active Directory

Недавно заметил, что у доброй сотни пользователей поля фамилия (атрибут GivenName) и имя (атрибут SurName) пустые. При наличии отображаемого имени (атрибут DisplayName) на решение задачи ушло не более двух минут. Итак, берем атрибут DisplayName пользователя, например Иванов Михаил Александрович, разделяем строку на массив строк, назначаем нужным нам атрибутам соответствующие значения массива.


Import-Module ActiveDirectory

$users = Get-ADUser -Filter * -Properties DisplayName,SamAccountName | ? {($_.surname -eq $null) -and ($_.DisplayName -ne $null)}

$users | % {$user = $_.SamAccountName; $tmp = $_.DisplayName -split ' '; if ($tmp.Count -eq 3) {Set-ADUser $user -Surname $tmp[1] -GivenName $tmp[0]}}


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

вторник, 22 марта 2016 г.

[Hyper-V] Динамические виртуальные диски VHD/VHDX не сжимаются в консоли Hyper-V Manager

С этой проблемой я столкнулся еще с версии Hyper-V 2008 R2. После выбора диска и опции "Compact" просто ничего не происходит. И только сейчас нашел решение проблемы (плохо искал). Для сжатия динамического виртуального диска нужно воспользоваться утилитой diskpart. Запустим ее и введем последовательно команды:


select vdisk file="C:\disk.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk



Естественно, все это дело можно автоматизировать. Diskpart поддерживает скрипты, а в проводник можно вставить через реестр новый пункт меню.

вторник, 15 марта 2016 г.

[EXCHANGE] Как делегировать техподдержке право назначать на почтовые ящики Manage Full Access Permisson?

Дело в том, что если пользователь входит в группу Exchange Recipient Administrators, то он может использовать только Manage Send As Permission. При попытке применить к ящику Manage Full Access Permission пользователь получает ошибку MapiExceptionNoAccess:





Для делегирования выполняем следующую команду:


Add-ADPermission -Identity (Get-OrganizationConfig | Select -Expand DistinguishedName) -User DOMAIN\HelpDesk -ExtendedRights ms-Exch-Store-Admin -InheritanceType All


Здесь пользователю DOMAIN\HelpDesk дается право на администрирования объекта ms-Exch-Store-Admin в огранизации. Это право необходимо для решения нашей задачи.

пятница, 4 марта 2016 г.

[Powershell] Синхронизация контактов внешнего домена в адресной книге Exchange

Дано: два домена Active Directory apple.int и berry.int, два почтовых сервера Exchange 2007 SP3 в обоих доменах. Необходимо, чтобы у пользователей одного домена в адресной книге почтового клиента Outlook отображались контакты пользователей другого домена и наоборот. Желательно, чтобы все это дело синхронизировалось автоматически.


Microsoft предлагает громоздкое решение Identity Integration Feature Pack (IIFP), но я хочу обойтись скриптами PowerShell.


Для начала создадим в конфигурации Exchange-сервера в обоих доменах новый список адресов для контактов внешнего домена. В apple.int создадим список адресов для домена berry.int, назвав его _Berry-Contacts, в домене berry.int назовем его _Apple-Contacts. В домене apple.int назначим условие, что адресному списку _Berry-Contacts будут соответствовать все контакты, у которых в поле 'Company' стоит 'Berry'.  В другом домене проделаем аналогично, только в поле 'Company' будет стоять 'Apple'.








1. В домене apple.int в консоли Exchange Management Shell получаем информацию о пользователях домена berry.int (экспортируем данные всех пользователей, имеющих адрес электронной почты):


Import-Module ActiveDirectory


$berry_cred = Get-Credential


$berry_users = Get-ADUser -Filter {EmailAddress -Like "*"} -Properties * -Server berry.int -Credential $berry_cred | Select name, samaccountname, officephone, emailaddress


2. Создаем новые контакты на основе полученных данных:


$berry_users | ForEach {New-MailContact -Name $_.name - Alias $_.samaccountname -ExternalEmailAddress $_.emailaddress | Set-Contact -Office 'Berry' -Phone $_.officephone}


3. Обновляем список адресов


Update-AdddressList _Berry-Contacts


В домене berry.int делаем абсолютно то же самое, только нацеливаемся на получение информации из домена apple.int.


Теперь (так просто и быстро) пользователи получают возможность увидеть в адресной книге Outlook список контактов пользователей другого домена.


Осталось доработать скрипт на удаление старых контактов, поставить в планировщик задач на обоих серверах с Exchage Management Shell и PoSH-модулем ActiveDirectory, и можно работать, забыв о проблеме синхронизации.


Безусловно, стоит понимать, что данная статься справедлива для небольших организаций, где количество пользователей ограничено, и, как правило, не превышает 50-150 чел.