Главная

Saturday, 27 July 2019

Exchange Management Shell.

Всем привет.

Славный MS Exchange имеет так называемый доступ со стороны Exchange Management Shell. Не обошел замечательный инструмент Powershell вниманием и его. Exchange Management Shell имеет свыше 500-та командлетов, так что работать с ним можно очень серьезно.

Для тoго чтобы что-то узнать из своего Exchange надо к нему подсоединится со своими креденшелами.

Можно пробовать так:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

Или так:
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://forza.com/powershell/ -Authentication Basic -AllowRedirection -Credential $UserCredential

Я не админ своего Exchange поэтому я захожу так:
$uc=Get-Credential
$s=New-PSSession -ConfigurationName microsoft.exchange -ConnectionUri http://forza.com/powershell -Authentication Kerberos -Credential $uc
Import-PSSession $s -DisableNameChecking | fl

А далее колдуем в рамках открытой сессии.

Общий размер почтовых баз на сервере:
Get-MailboxDatabase -Status | select-object Name,Server,DatabaseSize,Mounted

Узнать членов группы Buh-Forza:
Get-DistributionGroupMember –identity Buh-Forza
Это сработает если у вас выполнена: Set-ADServerSettings -ViewEntireForest $True



Вывести список с общим размером каждого почтового ящика:
Get-Mailbox | Get-MailboxStatistics | ?{!$_.DisconnectDate} | Select-Object DisplayName,TotalItemSize

Более широкий запрос с выгрузкой в файл:
Get-Mailbox -Organization "forza.com/Users/" -resultsize unlimited | sort Name | %{$Size=Get-MailboxStatistics $_.SamAccountName `
$_ | Select-object Name, SamAccountName, @{Name="Size";Expression={((($Size).TotalItemSize).value).toMB()+((($Size).TotalDeletedItemSize).value).toMB()}}} `
| export-csv -encoding unicode -NoTypeInformation D:\mailbox.csv

Перейдем в к более насущным запросам. Ловим тех горе-пользователей которые редко заходят в свою почту. Прямо таки игнорирует ее. Об этом нам скажем дата в поле LastLogonTime.

Чтобы выгрузить список пользователей, которые не заходили в почтовый ящик более, чем год тому с выгрузкой в файл:
Get-Mailbox -resultsize unlimited | Get-MailboxStatistics |?{$_.LastLogonTime -lt (date).adddays(-365)} `
| ft DisplayName,ItemCount,LastLogonTime,LastLoggedOnUserAccount -auto | Out-File D:\OLD_mailbox_365.txt

Да, и такие бывают, это первые кандидаты на удаление из закрытого общества Exchange нашей фирмы.

А теперь узнаем какие почтовые адреса были созданы в нашей почтовой системе за последние 30 дней:
Get-Mailbox | Where-Object {$_.WhenCreated –ge ((Get-Date).Adddays(-30))} | ft name, servername `
| Out-File C:\scripts\New_Mailbox_30days_ago.txt

Отлично. Идем дальше. Вот нарисовалась проблема у тех пользователей кто считает что письма надо все хранить, и хранить вечно. Поэтому их ящик очень быстро доcтигает своего предела. Таких надо знать в лицо.)

Общая статистика по ящику пользователя Maksimov.MM:
Get-MailboxStatistics -Identity Maksimov.MM -Verbose | fl

Статистика по ящику пользователя Maksimov.MM разбитая по папкам:
Get-MailboxFolderStatistics -Identity Maksimov.MM -FolderScope All | Select Name,ItemsFolder,FolderSize

Статистика по ящику пользователя Maksimov.MM с общим размером и количеством сообщений:
Get-MailboxStatistics -Identity Maksimov.MM | Sort-Object TotalItemSize –Descending `
| fl @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}},@{label=”Storage Limit”;expression={$_.StorageLimitStatus}}

Или так:
Get-MailboxStatistics -Identity Maksimov.MM | Sort-Object TotalItemSize –Descending `
| fl @{label="User";expression={$_.DisplayName}},@{label="Total Size (MB)";`
expression={$_.TotalItemSize.Value.ToMB()}},@{label="Items";`
expression={$_.ItemCount}},@{label="Storage Limit";expression={$_.StorageLimitStatus}}

Или еще более подробно:
Get-MailboxStatistics -Identity Maksimov.MM | Sort-Object TotalItemSize –Descending `
| fl @{label="User";expression={$_.DisplayName}}, `
@{label="Total Size (MB)";expression={$_.TotalItemSize}}, `
@{label="TotalSize (MB)" ;expression={$_.TotalItemSize.Value.ToMB()}}, `
@{label="Total Del Size (MB)";expression={$_.TotalDeletedItemSize}}, `
@{label="Items";expression={$_.ItemCount}}, `
@{label="Storage Limit Status";expression={$_.StorageLimitStatus}}, `
@{label="IssueWarningQuota";expression={$_.DatabaseIssueWarningQuota}}, `
@{label="ProhibitSendQuota";expression={$_.DatabaseProhibitSendQuota}}, `
@{label="ProhibitSendReceiveQuota";expression={$_.DatabaseProhibitSendReceiveQuota}}

C другой стороны есть необходимость проверить атрибут UseDatabaseQuotaDefaults значение которого определяет соответствует ли квота на размер ящика пользователя общему значению MS Exchange вашей фирмы или ему уже подняли его индивидуально:
Get-mailbox -ResultSize Unlimited | where {$_.UseDatabaseQuotaDefaults -ne $true}

Тот же запрос с выводом тех кто превзошел размер своего ящика в 1Гб:
Get-mailbox | where{$_.UseDatabaseQuotaDefaults -ne $true} | Get-MailboxStatistics | where {$_.TotalItemSize.value.ToMb() -gt 1000} | Select  DisplayName,TotalItemSize

И бонус - как удалить «плохое» сообщение из всех почтовых ящиков сразу:
get-mailbox -OrganizationalUnit Forza.com -ResultSize unlimited | Search-Mailbox -SearchQuery Subject:'Re: It's my vacation!' -TargetMailbox Maksimov.MM@forza.com -TargetFolder Inbox –DeleteContent

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?