Зачастую необходимо не просто получить размер почтового ящика пользователя на почтовом сервере Exchange 2016, но и иметь возможность следить за его динамикой. Это актуально во время архивации почтового ящика на стороне пользователя.
Из коробки функционал получения размера притаился в разделе «Использование почтового ящика«, а динамики можно добиться только с помощью обновления веб-страницы.
Чтобы узнать объём почтового ящика на сервере Exchange без путешествий по веб-страницам и иметь представление об его изменениях обратимся к магии PowerShell:
[System.Console]::Title = "Размер почтового ящика Exchange"
$server = "MAIL" # <== Указывается имя почтового сервера
# Предупреждение про модуль ActiveDirectory #
Write-Host "Для работы скрипта требуется модуль RSAT-AD-PowerShell!" -ForegroundColor Yellow
Write-Host
Sleep(5)
# Поиск модуля ActiveDirectoryObjectPicker #
if (Get-InstalledModule ActiveDirectoryObjectPicker -ErrorAction SilentlyContinue)
{
Write-Host "Импорт модуля ActiveDirectoryObjectPicker..." -ForegroundColor Yellow
Import-Module -Name ActiveDirectoryObjectPicker
}
else
{
Write-Host "Установка модуля ActiveDirectoryObjectPicker..." -ForegroundColor Yellow
Install-Module -Name ActiveDirectoryObjectPicker -Scope CurrentUser
}
# Проверка доступности сервера #
$testping = Test-Connection -Quiet -Count 1 -ComputerName $server
if ($testping)
{
# Подключение к почтовому серверу Exchange #
Write-Host "Идёт подключение к серверу $server..." -ForegroundColor Yellow
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
Import-PSSession $session
clear
# Получение UPN с помощью ActiveDirectoryObjectPicker #
Write-Host "Ожидание пользовательских данных..." -ForegroundColor Yellow
$upn = (Show-ActiveDirectoryObjectPicker -AllowedLocations EnterpriseDomain -DefaultObjectTypes Users -DefaultLocations EnterpriseDomain).Upn
$mailuser = ($upn -Split '@')[0]
# Если ActiveDirectoryObjectPicker вернул какие-то данные - выводим сообщение #
if ($mailuser)
{
$username = (Get-ADUser $mailuser).Name
$email = Get-ADUser $mailuser -Properties EmailAddress | select -ExpandProperty EmailAddress
# Если у пользователя обнаружен почтовый ящик #
if ($email)
{
clear
Write-Host "Выбран пользователь: $username" -ForegroundColor Cyan
Write-Host "Почтовый ящик: $email" -ForegroundColor Cyan
Write-Host
Write-Host "Размер почтового ящика $email составляет:" -ForegroundColor Cyan
while($true)
{
sleep(10)
$mailbox = (Get-MailboxStatistics $mailuser | Select-Object -ExpandProperty TotalItemSize).Value
Write-Host "$mailbox" -ForegroundColor Green
}
}
else { clear; Write-Host "У пользователя $mailuser не обнаружен почтовый ящик..." -ForegroundColor Red; Read-Host }
}
}
else { Write-Host "Сервер $server не отвечает..." -ForegroundColor Red; Read-Host }
Всё, что требуется — заменить название сервера в переменной $server.
Во время первого запуска будет установлен модуль ActiveDirectoryObjectPicker для текущего пользователя. Для работы скрипта в системе должен быть установлен модуль RSAT-AD-PowerShell!
Скрипт писался исключительно для применения в рамках домена Active Directory и последующей компиляции в exe c помощью PS2EXE.
Все посты про Exchange можно найти по этому тегу.