Скрипт позволяет подключаться к почтовому серверу MS Exchange и производить базовые операции: получать список баз данных, обновлять адресную книгу, создавать и получать список групп адресной книги, получать размер и общее количестве почтовых ящиков. Доступно получение статистических данных: общее количество почтовых ящиков по заданному году и имена пользователей, которым был создан ящик в обозначенный период.
Подключение ведётся New-PSSession с указанием конфигурации, поэтому позаботьтесь обо всех разрешениях на стороне сервера.
[System.Console]::Title = "Работа с почтовым сервером MS Exchange"
Write-Host
Write-Host "Для подключения к почтовому серверу MS Exchange через консоль PowerShell необходимо использовать только имя сервера!" -ForegroundColor Red
Write-Host "Запускать скрипт только с правами администратора!" -ForegroundColor Red
Write-Host
## Функция логирования ##
## Файл log.txt сохраняется в папку со скриптом ##
$Logfile = "log.txt"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString $namepc"
Add-content $LogFile -value $LogMessage
}
while($true)
{
Write-Host "0. Подключиться к серверу" -ForegroundColor Green
Write-Host "1. Получить список баз данных сервера" -ForegroundColor Green
Write-Host "2. Обновить адресную книгу" -ForegroundColor Green
Write-Host "3. Получить список групп адресной книги" -ForegroundColor Green
Write-Host "4. Создать новую группу адресной книги" -ForegroundColor Green
Write-Host "5. Получить размер почтовых ящиков" -ForegroundColor Green
Write-Host "6. Общее количество почтовых ящиков" -ForegroundColor Green
Write-Host "7. Количество почтовых ящиков по заданному году" -ForegroundColor Green
Write-Host "8. Почтовые ящики пользователей по заданному году" -ForegroundColor Green
Write-Host
$choice = Read-Host "Выберите вариант"
Write-Host
Switch($choice){
## Подключиться к серверу ##
0{$server = Read-Host "Введите имя почтового сервера"
if (!$server) {Write-Host "Необходимо ввести имя почтового сервера" -ForegroundColor Red
Write-Host
WriteLog "Сбой подключения. Было указано неверное имя сервера."}
if ($server) {
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
Import-PSSession $session
Write-Host
WriteLog "Попытка подключения к почтовому серверу."
}
}
## Получить список баз данных сервера ##
1{Get-MailboxDatabase -Status | ft Name,DatabaseSize,AvailableNewMailboxSpace
Write-Host
WriteLog "Попытка получения список баз данных почтового сервера."}
## Обновить адресную книгу ##
2{Get-AddressList | Update-AddressList
Get-GlobalAddressList | Update-GlobalAddressList
Get-OfflineAddressBook | Update-OfflineAddressBook
Write-Host
WriteLog "Попытка обновить адресную книгу почтового сервера."}
## Получить список групп адресной книги ##
3{get-DistributionGroup | ft Name,DisplayName,Grouptype,PrimarySMTPAddress
Write-Host
WriteLog "Попытка получить список групп адресной книги."}
## Создать новую группу адресной книги ##
4{$name = Read-Host "Введите имя группы на транслите (создаётся в ActiveDirectory)"
$displayname = Read-Host "Введите отображаемое имя (будет видно в адресной книге)"
$unit = Read-Host "Введите адрес подразделения для размещения группы в ActiveDirectory"
New-DistributionGroup -name $name -DisplayName $displayname -alias $name -OrganizationalUnit $unit -SAMAccountName $name -type 'Distribution'
Set-Group -identity $name -IsHierarchicalGroup:$true
Write-Host
WriteLog "Попытка создать новую группу адресной книги."}
## Получить размер почтовых ящиков ##
5{$db = Read-Host 'Введите имя базы данных'
Get-Mailbox -Database $db | Get-MailboxStatistics | ft displayname,totaldeleteditemsize,totalitemsize | Out-File allmail.txt
Write-Host
if(Test-Path -Path "allmail.txt")
{Write-Host "РЕЗУЛЬТАТ СОХРАНЁН В ФАЙЛ ALLMAIL.TXT" -ForegroundColor Green
Write-Host "ИЩИТЕ ФАЙЛ В ПАПКЕ С ТЕКУЩИМ СКРИПТОМ!" -ForegroundColor Green}
else {Write-Host "ПРОИЗОШЛА ОШИБКА СОХРАНЕНИЯ ФАЙЛА ИЛИ ЖЕ ФАЙЛ НЕ НАЙДЕН!" -ForegroundColor Red}
Write-Host
WriteLog "Попытка получения размера почтовых ящиков."}
## Общее количество почтовых ящиков ##
6{Write-Host "Общее количество почтовых ящиков"
Get-Mailbox | sort Name | Measure-Object | select count
Write-Host
WriteLog "Попытка получения количества почтовых ящиков."}
## Количество почтовых ящиков по заданному году ##
7{$year = Read-Host 'Год создания ящиков'
Get-Mailbox | Where-Object {($_.WhenCreated).Year –eq $year} | Measure-Object | select count
Write-Host
WriteLog "Попытка получения количества почтовых ящиков по заданному году."}
## Почтовые ящики пользователей по заданному году ##
8{$year = Read-Host 'Год создания ящиков'
Get-Mailbox | Where-Object {($_.WhenCreated).Year –eq $year} | ft name, servername
Write-Host
WriteLog "Попытка получения почтовых ящиков пользователей по заданному году."}
## Неверный выбор ##
default {Write-Host "Неверный выбор. Попробуйте снова." -ForegroundColor Red
Write-Host
WriteLog "Неверный выбор задачи"}
}
}