Автоматизируем включение 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 и скачать их можно тут либо на официальном сайте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *