четверг, 20 января 2011 г.

Фиксация групп рассылок при миграции почты между организациями Exchange (2003/2007/2010).

Решил выложить ряд скриптов, полезных при миграции AD/Exchange.
Этот скрипт позволяет фиксить группы распространения Exchange, тем самым сохраняя членство пользователей в группах рассылки после миграции пользователя между лесами.
Попробуем рассмотреть схему инфраструктуры AD/Exchange на момент миграции (пусть будет Exchange 2003 исходный и Exchange 2007 целевой):
1) Мы интегрировали два леса и две организации Exchange (Пользователей пока не мигрировали) – настроили маршрутизацию между двумя организациями, настроили синхронизацию Global Address List в ILM 2007 FP1 (или MIIS 2003, или FIM 2010). При такой схеме, почта, отправленная из целевого леса разрешается с помощью контакта в адрес @source.com и с помощью настроенного Send-connector’а маршрутизируется в исходный лес.

2) Мы мигрируем пользователей/группы из исходного леса в целевой лес, с сохранением SID. Получаем следующую картину. 

У смигрированных пользователей нет атрибутов Exchange, соответственно почтовых ящиков. Их перенесут позже.
3) Дальше мы мигрируем почту пользователей (возможно параллельно с компьютерами) командлетом Move-Mailbox и получаем следующую картину:

Теперь у пользователя есть почтовый ящик на сервере EX-Target, контакт в процессе миграции удаляется (как правило). Но у пользователя в целевом лесу почтовые атрибуты также остаются. Это может привести к проблемам – пользователи из исходного домена будут видеть в адресной книге старый почтовый ящик и письма слать на него, в свою очередь пользователи из целевого домена будут видеть в адресной книге новый почтовый ящик и слать письма на него (в случае если в целевом домене уже есть смигрированные пользователи). То есть ящики живут своей жизнью (их можно синхронизировать повторной миграцией со слиянием).

Чтобы этого не случилось, нам необходимо удалить почтовый ящик из целевого домена сразу после миграции. Сделать это можно соответствующим параметром командлета Move-Mailbox (смотрите справку по данному командлету) и, если у нас исходный лес Exchange 2003, это можно сделать соответствующим мастером из Exchange System Management или Active Directory Users And Computers (если зарегистрирована соответствующая оснастка-расширение). Первый способ подходит для Exchange 2003 и для Exchange 2007. Второй способ только для Exchange 2003. Но первый способ я бы не рекомендовал использоваться для Exchange 2003, поскольку почтовый ящик удаляется физически и его нельзя подцепить обратно в случае отката действий. Здесь скрипт, который помогает автоматизировать этот процесс: http://gexeg.blogspot.com/2010/02/exchange-2003.html. Также можно проделать эти действия с помощью утилиты ADModify.
4) Удалили мы почтовый ящик из исходного домена, каким либо способом. Теперь у нас следующая картина:

5) Запускаем ILM 2007 для синхронизации GAL. У нас создается соответствующий контакт в исходном домене и проблема из пункта 4 решается. Теперь почта для этого пользователя будет разрешаться в контакт и маршрутизироваться в целевой лес.

Появляется еще одна проблема. До этого пользователь состоял в группе рассылки «Группа рассылки 1». Он и сейчас там есть, но у него нет атрибутов. Поэтому почта, отправленная на группу рассылки не попадет в ящик пользователя «Пользователь 1» (как из целевого, так и из исходного домена).
Как решить эту проблему? Очень просто, необходимо добавить контакт «Контакт (Пользователь1)» в группу рассылки «Группа рассылки 1).

Теперь почта, отправленная на группу рассылки исходного домена, будет расширяться (expand) в контакт и маршрутизироваться в целевой лес. Почта, отправленная  на группу рассылки из целевого домена, будет разрешаться в контакт целевого домена, маршрутизироваться в исходный лес, далее в исходном лесу попадет на группу рассылки, расширится в контакт и маршрутизируется в целевой лес. Трафик, конечно не оптимальный, но работает.
Ручное добавление контактов в группу становится кошмаром, когда таких контактов много (сотни, тысячи). Тут нужна автоматизация.
Я столкнулся с этой проблемой и написал скрипт, который позволяет автоматизировать задачу ручного добавления контактов в группы рассылки.

Скрипт - fix_distribution_group.ps1

Синтаксис:
fix_distribution_group.ps1 -slotfile <Входной файл> [-SourceDomain <домен-источник>] [-TargetDomain <целевой_домен>] [-Force]
-slotfile <входной файл> - файл со списком логинов смигрированных пользователей с почтовыми ящиками. Обязательный параметр.
-SourceDomain <домен-источник>  - домен источник. Необязательный параметр. В этом домене происходит поиск контактов и групп распространения пользователей. В этом же домене происходят изменения – контакт добавляется в группу распространения. Поэтому необходимы соответствующие права. Если этот параметр опустить, то будет использоваться текущий контекст пользователя и его домен. Может быть указано в формате DNS-имя или NETBIOS-имя.
-TargetDomain <целевой-домен>. Необязательный параметр. В этом домене происходит поиск почтового ящика пользователя, для того чтобы потом найти соответствующий контакт в исходном домене. Необходимые права – только на чтение. Если этот параметр опустить, то будет использоваться текущий контекст пользователя и его домен. Может быть указано в формате DNS-имя или NETBIOS-имя.
-Force. Этот параметр позволяет не выводить подтверждение на проводимые модификации перед выполнением скрипта. По умолчанию перед выполнением скрипта будут показаны параметры запуска и требование подтверждения дальнейшего выполнения. Это очень важно - поскольку происходят модификации данных.
-Help. Вызов справки по скрипту.

Примечание:
Необходимо указать хотя бы один из параметров sourcedomain или argetdomain. Эти параметры не должны быть одинаковыми. Соответствующие проверки происходят. В случае неправильности – будет выдана ошибка.

Примеры:
fix_distribution_group.ps1 -slotfile slot1.txt -SourceDomain source.com
fix_distribution_group.ps1 -slotfile slot1.txt -SourceDomain source.com –TargetDomain target.com
fix_distribution_group.ps1 -slotfile slot1.txt -SourceDomain source.com -Force

Описание работы и ограничения:
Работает скрипт следующим образом. Читается файл, указанный в параметре slotfile. Содержание файла – логины (sAMAccountName), построчно. Для каждого пользователя из файла происходит поиск этого пользователя в исходном домене (по атрибуту sAMAccountName). Далее у найденного пользователя определяются группы распространения, в которых он состоит (поэтому не нужно удалять пользователя из этих групп или вообще удалять). После этого происходит поиск в целевом домене (по sAMAccountName). У найденного пользователя (целевой домен) происходит чтение атрибута legacyExchangeDN. Затем в исходном домене по атрибуту proxyAddresses ищется контакт, у которого есть этот адрес (legacyExchangeDN). Если контакт найден, то он добавляется во все ранее найденные группы распространения пользователя исходного домена.
Во входном файле можно указать подстановочные знаки LDAP, но при поиске будет возвращен только один объект (первый).
Есть ограничение. Поскольку поиск в целевом домене происходит по sAMAccountName (в идеале нужно искать по SIDHistory), то исходный и целевой пользователи должны иметь одинаковые sAMAccountName (хотя можно использовать хитрость с подстановочными знаками во входном файле).
Поиск по SIDHistory не трудно реализовать (есть в одном из моих скриптов, который также скоро выложу, можно выдрать из него).

Сам скрипт:

среда, 19 января 2011 г.

ISA 2004, ISA 2006, TMG2010 Medium Business Edition не поддерживает перенаправление трафика

Столкнулся с такой проблемой при миграции с ISA 2000 на ISA 2006.С ISA 2000 перенаправление с использованием ICMP работает, с 2006 нет.
Симптомы:
1) ICMP-трафик между сетями работает, TCP нет. Не происходит фаза инициализации TCP, хотя пакеты между хостами ходят.

Подробнее проблема описана здесь:

ISA Server 2004, ISA Server 2006, and Microsoft Forefront Threat Management Gateway, Medium Business Edition do not support traffic redirection.
http://support.microsoft.com/kb/888042/en-us

Подробнее о ICMP Redirection:
http://support.microsoft.com/kb/195686/en-us

пятница, 14 января 2011 г.

Windows Links

Windows Server 2008 R2 Edition Comparison by Technical Specification:
http://www.microsoft.com/windowsserver2008/en/us/r2-compare-specs.aspx

Windows Server 2008 R2 Differentiated Feature Comparison by Edition:
http://www.microsoft.com/windowsserver2008/en/us/r2-differentiated-features.aspx

Explanation of ICMP Redirect Behavior (Перенаправление трафика с помощью ICMP):
http://support.microsoft.com/kb/195686/en-us

При назначении IP-адреса сетевому адаптеру появляется сообщение об ошибке:
IP-адрес XXX.XXX.XXX.XXX, указанный для этого сетевого адаптера, уже назначен другому адаптеру имя адаптераИмя адаптера скрыто от папки «Сетевые подключения», поскольку он либо физически отсутствует в компьютере, либо является устаревшим и не работает. Если обоим устройствам назначен один и тот же адрес, только одно из них сможет его использовать. Это может привести к неполадкам в работе системы. Ввести другой IP-адрес для этого адаптера в список IP-адресов в окне дополнительных параметров?
http://support.microsoft.com/kb/269155

Выравнивание разделов в Windows:
http://support.microsoft.com/kb/929491/en-us

How to use the "netsh advfirewall firewall":
http://support.microsoft.com/kb/947709/en-us

Event KB:
http://kb.prismmicrosys.com/

Adm template:
http://gps.cloudapp.net/

IIS Resource Kit Tools:
http://www.microsoft.com/downloads/en/details.aspx?familyid=56FC92EE-A71A-4C73-B628-ADE629C89499&displaylang=en

Windows Bitlocker Drive Encryption Design and Deployment Guide:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=41ba0cf0-57d6-4c38-9743-b7f4ddbe25cd&displaylang=en

DiskShadow:
http://technet.microsoft.com/en-us/library/cc772172.aspx

Утилита для управления привязками служб и протоколов на сетевом интерфейсе (tool for modifying network bindings from the command line):
http://archive.msdn.microsoft.com/nvspbind

Повсём:
http://technet.microsoft.com/en-us/windowsserver/bb633748.aspx

Исключения антивируса на контроллерах доменов:
http://support.microsoft.com/kb/822158/en-us

Исключения антивируса для SQL Server:
http://support.microsoft.com/kb/309422/en-us

Service overview and network port requirements for the Windows Server system
http://support.microsoft.com/kb/832017/en-us

Win Error Structure:
http://msdn.microsoft.com/en-gb/library/cc231198.aspx
Error Code Lookup tool:
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=985