===== Скрипт вывода статистики ящика (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 {{tag>Exchange Microsoft Mail PowerShell EWS}}