Exchange Server 2016 и Windows Server 2016


С выходом CU3 Exchange Server 2016 должна была появится поддержка установки на Windows Server 2016. Она и появилась. Только тут же выявилась проблема: IIS стал падать. В результате продуктовая группа рекомендовала отложить внедрение Exchange Server на Windows Server 2016 до выхода исправления.

Такое обновление для Windows Server 2016 выпущено и доступно KB3206632. Теперь мы можем внедрять Exchange на Windows Server 2016. Хотя для критически важных внедрений лучше не торопиться, помониторить форумы и подождать очередной волны обновлений.

Идентифицирована проблема с TMG 2010 киентом на Windows 10 1607


Наконец-то установили причину, почему не работает TMG 2010 клиент на Windows 10. Клиент пишет: «authentication error«.  Это началось примерно в феврале 2016 года в сборках Preview и проблема перешла в версию 1607. Теперь причина проблемы установлена » root cause to be due to a change in the negotiate/kerberos code with how callers provide credential handle or context handle for each call».

Обещан фикс в очередных сборках Windows 10 Preview RS1 (Redstone). Скорее всего уже после новогодних праздников.

Powershell 6 — новый командлет Get-Uptime


Да теперь моими усилиями в Powershell 6 есть командлет Get-Uptime, который, как можно легко понять, возвращает длительность работы ОС или время старта системы.

Как оказалось это нетривиальная задача. Основная проблема в том, что командлет должен работать на всех системах Windows, OSX и Linux. Например Windows мы можем получить зачение Uptime несколькими способами: 1. используя WMI класс Win32_OperatingSystem — это выполняется медленно и работает только на Windows, 2. используя счётчик производительности «System Uptime» — это наиболее правильный способ для Windows, но он не работает на других системах.

В конечном итоге оказалось возможным использовать класс .Net Stopwatch Class (System.Diagnostics). Это нецелевое использование этого класса. Тем не менее нашёлся хитрый вариант, который работает. Подробности можно найти по ссылке #2497.

Powershell 6 — изменения в Get-WinEvent Часть 2


Только я успел сообщить о том, что мне удалось устранить багу в Get-WinEvent, как была одобрена вторая часть моей работы Add support <Suppress> in Get-WinEvent -FilterHashtable в рамках проекта Open Powershell.

Теперь можно не только формировать запрос Select и выбирать события по нужным критериям, но добавлять фильтр для отсеивания событий:


$filterSuppress = @{ path = "$ystem";  SuppressHashFilter=@{Id=370}}

$resultsSuppress = Get-WinEvent -filterHashtable $filterSuppress

TMG 2010 и SSL 3.0


При публикации вэб-ресурсов TMG создаёт HTTPS подключения от своего имени. Таким образом TMG сервер может стать слабым звеном при атаке с использованием уязвимости SSL3.0, и требуется отключить SSL на TMG серверах.

Несмотрю на ожидания подвоха, TMG всё же использует системный Crypto-API (Crypto subsystem). Точнее даже SCHANNEL. Поэтому для выключения поддержки SSL 3.0 достаточно использовать стандартное решение с добавлением ключей реестра Enabled = 0

SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server

SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client

Для настройки множества серверов используем Group Policy Preferences. (Серверы 2008 R2 требуют перезагрузки для применения параметров).

Для контроля используем сервис  Qualys SSL Labs

Полезные ссылки:

https://support.microsoft.com/en-au/kb/245030

Mitigating the POODLE SSL 3 Vulnerability on Forefront TMG 2010

 

Powershell — импорт сертификата


По просьбе коллеги публикую скрипт импорта сертификата, который работает на Powershell 2.0 и выше (по идее и на 1.0, но не проверял). Автоматизация обслуживания пользовательских систем требует запуска множества скриптов с помощью SCCM, но к сожалению не все системы возможно обновить до современных версий. В результате приходится писать скрипты, которые работают не только на Powershell 5, но и на Powershell 2.0 (Windows XP), что влечет за собой отказ от расширенных возможностей более новых версий Powershell.

function Import-PfxCertificate {
param([String]$certPath,[String]$certRootStore = "CurrentUser",[String]$certStore = "My",$pfxPass = (ConvertTo-SecureString -String "7Gg2Vq4Hd" -Force -AsPlainText))</pre>
$pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2

#if ($pfxPass -eq $null) {$pfxPass = read-host "Enter the pfx password" -assecurestring}

$pfx.import($certPath,$pfxPass,"Exportable,PersistKeySet")

$store = new-object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore)
$store.open("MaxAllowed")
$store.add($pfx)
$store.close()
}
Import-PfxCertificate "$((Get-Location).Path)\cert.pfx"

Как извлечь учетные данные из Sharepoint Secure Store


Переносил на днях базу данных используемую в External Type на сайте Sharepoint, и потребовалось уточнить от имени какой учётной записи производится доступ к базе данных. Всю цепочку настроек можно посмотреть через сайт управления кроме используемой учётной записи.

Нашелся вот такой простой скриптик, который выводит все Secure Store Target Application Id и соответствующие им логины и пароли:


$SecureStoreProvider=[Microsoft.Office.SecureStoreService.Server.SecureStoreProviderFactory]::Create()
$site = Get-SPSite -Identity $(Get-SPWebApplication -IncludeCentralAdministration | ?{ $_.IsAdministrationWebApplication}).Url
$SecureStoreProvider.Context = Get-SPServiceContext -Site ($site)
$SecureStoreProvider.GetTargetApplications() |  ForEach-Object {
Write-Host $_.Name
try {
$SecureStoreProvider.GetCredentials($_.ApplicationId) | ForEach-Object {
$Credential = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($_.Credential))
Write-Host "`t$($_.CredentialType): $($Credential)"
}
} catch  {
Write-Host "`t$($_)"  -ForegroundColor yellow
}
}
<div class="container">
<div class="line number1 index0 alt2"><code class="powershell plain"> </code></div>
</div>

Скрипт взят отсюда https://sharepointobservations.wordpress.com/2015/02/05/retrievingrecovering-secure-store-credentials/