Как поломать Autodiscover безобидной настройкой


Сегодня с коллегой разбирались с некой проблемой на Exchange Server 2013 и попутно увидели в логах предупреждение за номером Event ID:2002 «The number of outstanding requests for guard TargetBackend («») has exceeded the max limit 150. Current request will be rejected.» На фронтендах добавили в web.config строчку <add key=”HttpProxy.ConcurrencyGuards.TargetBackendLimit” value=”2000″ />. Предупреждение ушло. Когда разобрались с основной проблемой, эта настройка осталась в конфиге.

Через некоторое время пользователи пожаловались, что не работает почта (клиенты) снаружи из Интернет. Проверка на https://testconnectivity.microsoft.com показала, что сломался autodiscover. Снаружи. Внутри работает. Перебрали всю цепочку — все в норме, но проблема есть. Коллега подключился из браузера по линку /Microsoft-Server-ActiveSync/, и среди прочей информации мы с удивлением обнаружили  выше упомянутую строчку подсвеченную красным! Убрали из конфигов — autodiscover снаружи ожил.

Отличие Autodiscover внутри и снаружи — внутри аутентификация Windows, снаружи — Basic. Как это все связано непонятно.

Вот такая забавная ситуация. Если будете менять стандартные конфиги, будьте готовы, что разные сервисы могут отнестись к этому по-разному.

Новый атрибут ArgumentCompletions в PowerShell Core 6.0


На днях добавил новый атрибут ArgumentCompletions в PowerShell Core 6.0.

Когда он полезен? Хорошим примером служит параметер -Format командлета Get-Date , который теперь его использует.

Этот параметер может принимать стандартные значения  FileDate,  FileDateUniversal,  FileDateTime,  FileDateTimeUniversal, а также форматные строки вида «yyyyMMdd». Чтобы реализовать автоподстановку стандартных значений по Tab (tab completion или IntelliSense), применить атрибут ValidateSet не представляется возможным: он запретит форматные строки.

Единственным вариантом в версии 5 было — реализовать и зарегистрировать свой обработчик на основе IArgumentComplete. Но это достаточно громоздкое решение.

Теперь вы можете сделать так:

[parameter]
[ArgumentCompletions("FileDate", "FileDateUniversal", "ileDateTime", "FileDateTimeUniversal" )]
<span 				data-mce-type="bookmark" 				id="mce_SELREST_start" 				data-mce-style="overflow:hidden;line-height:0" 				style="overflow:hidden;line-height:0" 			></span>Format

Теперь если вы наберете Get-Date -Format и нажмете Tab, то заработает подстановка стандартных значений.
Вы сможете это попробовать уже в Beta.8 через несколько дней и это будет работать в ваших скриптах и скопилированных командлетах в PowerShell Core 6.0 RTM.

Подсказка по установке Exchange


Оказывается Exchange при установке хранит в папке ExchangeSetupLogs не только логи, но и некоторые рабочие файлы. Если предыдущаая установка имела проблемы или завершилась с ошибкой, то рекомендуется переименовать папку ExchangeSetupLogs перед очередным запуском setup.exe.