PowerShell · 06.10.2023

На деревню дедушке…

Все посты про работу с почтовым сервером Exchange можно найти по этому тегу.

Где-то здесь уже рассматривалась удалённая работа с почтовым сервером Exchange 2016 c помощью универсального скрипта. Скрипт, представленный ниже, это выжимка из него же, но с одной единственной целью — подключиться к серверу и обновить адресную книгу.

Скрипт пригождается, когда все изменения уже были внесены в Active Directory, а до штатного обновления сервера ещё очень долго.

[System.Console]::Title = "Обновление адресной книги Exchange"

# Переменная с именем почтового сервера #
$server = "MAIL"

$ping = Test-Connection -ComputerName $server -Count 1 -Quiet
if ($ping)
{
    try
    {
        Write-Host "Идёт подключение к почтовому серверу $server" -ForegroundColor Yellow
        $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
        Import-PSSession $session
        Clear
        Write-Host "Запущено обновление адресной книги..." -ForegroundColor Yellow
        Get-AddressList | Update-AddressList
        Get-GlobalAddressList | Update-GlobalAddressList
        Get-OfflineAddressBook | Update-OfflineAddressBook
        Write-Host "Обновление завершено!" -ForegroundColor Green
        Sleep(15)
        Exit
    }
    catch
    {
        Write-Host "Ошибка обращения к почтовому серверу $server" -ForegroundColor Red
        Sleep(15)
        Exit 
    }
}
else
{
    Write-Host "Не удалось подключиться к почтовому серверу $server" -ForegroundColor Red
    Sleep(15)
    Exit 
}

Напомню, что ConnectionUri в конфигурации Microsoft.Exchange командлета New-PSSession (см. переменную $session) сможет распознать url-адрес и подключиться к серверу только если указано имя почтового сервера, а не его IP. Специально для этого и существует переменная $server.

После обновления скрипт закроется сам. Ко всем событиям добавлен Sleep(15) для наглядности работы.