This is an old revision of the document!
Скрипт вывода статистики ящика (EWS)
Данный скрипт сделает поиск почты в ящике за последние 18 месяцев в папке “входящие” и вложенных подпапках, и посчитает количество писем по дням недели. К примеру - сколько за 18 месяцев было получено почты по понедельникам, сколько по вторникам и т.д. Результаты будут выведены в консоли.
Для работы требуется EWS Managed API 2.2 и данные учётной записи, обладающей правами на ящик, в котором происходит поиск.
# Загрузить EWS Managed API
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
# Учетные данные
$mailbox = "user@arasaka.local"
$username = "arasaka\user"
$password = "password"
$secure = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Net.NetworkCredential($username,$secure)
# Создаем сервис EWS
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService(
[Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016
)
$service.Credentials = $cred
$service.AutodiscoverUrl($mailbox, {$true})
# Дата начала (6 месяцев назад)
$startDate = (Get-Date).AddMonths(-18)
# Счетчик дней недели
$stats = @{
"Monday" = 0
"Tuesday" = 0
"Wednesday" = 0
"Thursday" = 0
"Friday" = 0
"Saturday" = 0
"Sunday" = 0
}
# Найти Inbox
$Inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind(
$service,
[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox
)
# Получить все подпапки Inbox
$folderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000)
$folderView.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep
$folders = $service.FindFolders($Inbox.Id,$folderView)
# Добавить сам Inbox
$allFolders = @($Inbox)
$allFolders += $folders.Folders
foreach ($folder in $allFolders)
{
Write-Host "Scanning:" $folder.DisplayName
$itemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000)
do {
$results = $service.FindItems($folder.Id,$itemView)
foreach ($item in $results.Items)
{
if ($item.DateTimeReceived -ge $startDate)
{
$day = $item.DateTimeReceived.DayOfWeek.ToString()
$stats[$day]++
}
}
$itemView.Offset += $results.Items.Count
} while ($results.MoreAvailable)
}
# Вывод результата
Write-Host ""
Write-Host "Mail statistics for last 18 months:"
$stats.GetEnumerator() | Sort-Object Name | Format-Table -AutoSize