Автоматизируем включение OWA и ActiveSync
Я в своей организации блокирую удаленный доступ через OWA и ActiveSync всем пользователям по умолчанию. Но есть группа лиц которым этот доступ нужен. Чтобы не давать лишних прав в Exchange я написал небольшой скрипт автоматизации. Смысл в том что мы создаем группу в AD при добавлении в которую пользователю будет открыт внешний доступ. Данный скрипт будет запускаться на сервере Exchange каждый час. И чтобы добавить пользователю нужный доступ просто добавляем его учетную запись в группу AD. Итак давайте автоматизируем включение OWA и ActiveSync.
Импортируем командлеты Microsoft Exchange и ActiveDirectory
Import-Module ActiveDirectory
$exch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mbx.newadmin.ru/powershell/ -ErrorAction SilentlyContinue
Import-PSSession $exch -ErrorAction SilentlyContinue
В строке http://mbx.newadmin.ru/powershell/ меняете mbx.newadmin.ru на полное доменное имя своего сервера Microsoft Exchange.
Определим контроллеры доменов
У меня два офиса один в Москве другой в Санкт-Петербурге. В каждом офисе свой домен и по 3 контроллера в каждом домене. Нам необходимо определить полное имя контроллера для каждого домена.
$msk=(Get-DomainController -DomainName newadmin.ru |select -First 1).DnsHostName
$spb=(Get-DomainController -DomainName spb.newadmin.ru |select -First 1).DnsHostName
Тут соответственно newadmin.ru основной домен в Москве, а spb.newadmin.ru второй домен в Санкт-Петербурге.
Смотрим пользователей группы в AD
Мы создали группу в ActiveDirectory и добавляем туда пользователей которым необходим доступ к OWA и ActiveSync. Группу я назвал GP_EXCHANGE_ENABLE
$vip_msk=(Get-ADGroupMember -Identity "GP_EXCHANGE_ENABLE" -Server dc.newadmin.ru|foreach {Get-ADUser $_}|Where-Object {$_.Enabled -eq $True -and $_.UserPrincipalName -like "*@newadmin.ru"}).UserPrincipalName
$vip_spb=(Get-ADGroupMember -Identity "GP_EXCHANGE_ENABLE" -Server dc.newadmin.ru|foreach {Get-ADUser $_}|Where-Object {$_.Enabled -eq $True -and $_.UserPrincipalName -like "*@spb.newadmin.ru"}).UserPrincipalName
Я создал переменные $vip_msk и $vip_spb и сохранил туда пользователей из группы GP_EXCHANGE_ENABLE которым впоследствии будет включен доступ. Тут newadmin.ru и spb.newadmin.ru меняете на свои.
Включение доступа к OWA и ActiveSync пользователям Москвы
В переменную $disable_msk заношу всех включенных пользователей с почтовыми ящиками из Москвы. Далее в $check_msk происходит сравнение $disable_msk и $vip_msk. В результате сравнения из общей группы пользователей с ящиками убираются те кто находится в группе GP_EXCHANGE_ENABLE. После этого убираю у всех оставшихся доступ к OWA и ActiveSync. Заключительным этапом прохожу по $vip_msk и включаю им доступ.
$disable_msk=((Get-CASMailbox -DomainController $msk -ResultSize Unlimited).SamAccountName | foreach {Get-ADUser $_ -Server $msk}| Where-Object {$_.Enabled -eq $True}).UserPrincipalName
$check_msk=(Compare-Object -ReferenceObject $disable_msk -DifferenceObject $vip_msk).inputobject
foreach ($a in $check_msk) {Get-CASMailbox $a -DomainController $msk| Set-CASMailbox -DomainController $msk -OWAEnabled $False -ActiveSyncEnabled $False}
$vip_msk | ForEach-Object {Set-CASMailbox -DomainController $msk $_ -OWAEnabled $True -ActiveSyncEnabled $True}
Включение доступа к OWA и ActiveSync пользователям Санкт-Петербурга
Тут принцип тот же самый, только названия переменных немного другие и название домена.
$disable_spb=((Get-CASMailbox -DomainController $spb -ResultSize Unlimited).SamAccountName | foreach {Get-ADUser $_ -Server $spb}| Where-Object {$_.Enabled -eq $True}).UserPrincipalName
$check_spb=(Compare-Object -ReferenceObject $disable_spb -DifferenceObject $vip_spb).inputobject
foreach ($b in $check_spb) {Get-CASMailbox $b -DomainController $spb| Set-CASMailbox -DomainController $spb -OWAEnabled $False -ActiveSyncEnabled $False}
$vip_spb | ForEach-Object {Set-CASMailbox -DomainController $spb $_ -OWAEnabled $True -ActiveSyncEnabled $True}
Для удобства скрипт полностью можно увидеть ниже
Import-Module ActiveDirectory
$exch = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mbx.newadmin.ru/powershell/ -ErrorAction SilentlyContinue
Import-PSSession $exch -ErrorAction SilentlyContinue
$msk=(Get-DomainController -DomainName newadmin.ru |select -First 1).DnsHostName
$spb=(Get-DomainController -DomainName spb.newadmin.ru |select -First 1).DnsHostName
$vip_msk=(Get-ADGroupMember -Identity "GP_EXCHANGE_ENABLE" -Server dc.newadmin.ru|foreach {Get-ADUser $_}| Where-Object {$_.Enabled -eq $True -and $_.UserPrincipalName -like "*@newadmin.ru"}).UserPrincipalName
$vip_spb=(Get-ADGroupMember -Identity "GP_EXCHANGE_ENABLE" -Server dc.newadmin.ru|foreach {Get-ADUser $_}| Where-Object {$_.Enabled -eq $True -and $_.UserPrincipalName -like "*@spb.newadmin.ru"}).UserPrincipalName
$disable_msk=((Get-CASMailbox -DomainController $msk -ResultSize Unlimited).SamAccountName | foreach {Get-ADUser $_ -Server $msk}| Where-Object {$_.Enabled -eq $True}).UserPrincipalName
$check_msk=(Compare-Object -ReferenceObject $disable_msk -DifferenceObject $vip_msk).inputobject
foreach ($a in $check_msk) {Get-CASMailbox $a -DomainController $msk| Set-CASMailbox -DomainController $msk -OWAEnabled $False -ActiveSyncEnabled $False}
$vip_msk | ForEach-Object {Set-CASMailbox -DomainController $msk $_ -OWAEnabled $True -ActiveSyncEnabled $True}
$disable_spb=((Get-CASMailbox -DomainController $spb -ResultSize Unlimited).SamAccountName | foreach {Get-ADUser $_ -Server $spb}| Where-Object {$_.Enabled -eq $True}).UserPrincipalName
$check_spb=(Compare-Object -ReferenceObject $disable_spb -DifferenceObject $vip_spb).inputobject
foreach ($b in $check_spb) {Get-CASMailbox $b -DomainController $spb| Set-CASMailbox -DomainController $spb -OWAEnabled $False -ActiveSyncEnabled $False}
$vip_spb | ForEach-Object {Set-CASMailbox -DomainController $spb $_ -OWAEnabled $True -ActiveSyncEnabled $True}
Данный скрипт можно модифицировать в соответствии со своей инфраструктурой. В пользовании очень удобно и сокращает значительное количество времени заведение доступа пользователям. Также практически удобно выводить список тех кому выдан доступ. Посмотреть список накопительных версий Microsoft Exchange 2016 и скачать их можно тут либо на официальном сайте.