Скрипт восстановления ящиков мониторинга в Exchange Server 2013


Механизм управляемой доступности встроенный в Exchange Server 2013 очень важен. О его критической важности я уже писал Managed Availability на Exchange Server 2013 иногда опасна. Суть в том, что MA содержит не только код диагностики, но и код для восстановления работоспособности разных подсистем Exchange Server. Это само по себе способно порождать проблемы. Поэтому важно следить за исправностью подсистемы MA.

Managed Availability базируется на специальных почтовых ящиках мониторинга, через которые пропускается тестовый почтовый поток. Это ящики создаются автоматически. Если с ними возникают какие-то проблемы, то они создаются заново сервисом Microsoft Exchange Health Manager. Это может приводить со временем к накоплению «брошенных» объектов, которые больше не используются. К тому же Health Manager сервис выявляет не все проблемные ситуации возникающие с почтовыми ящиками мониторинга. В блоге разработчиков Exchange Server есть статья Exchange 2013 Monitoring Mailboxes, которая не только раскрывает разные тонкости почтовых ящиков мониторинга, но и описывает процедуру их полного восстановления, которая может выполняться только в исключительных случаях. Эта процедура реализована мной в виде скрипта на Powershell и опубликована в Галерее скриптов Reset Exchange 2013 Monitoring Mailboxes.

<#
.Synopsis
   Reset Exchange 2013 Monitoring Mailboxes.
.DESCRIPTION
   Reset Exchange 2013 Monitoring Mailboxes.

   The script stop Microsoft Exchange Health Manager service on all Exchange servers,
   disable Monitoring Mailboxes,
   remove accounts and start Microsoft Exchange Health Manager services.

   The script inspeared by Bhalchandra Atre's article http://blogs.technet.com/b/exchange/archive/2015/03/20/exchange-2013-monitoring-mailboxes.aspx
.EXAMPLE
   .\Reset-ExchangeMonitoringMailboxes
#>
function Reset-ExchangeMonitoringMailboxes
{

    Begin
    {

        # Check RunAs Administrator
        if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
        { throw("Please re-run this script with elevated rights -  RunAs Administrator!") }

        $monmailboxes = Get-Mailbox -Monitoring

        # OU = LDAP://CN=Monitoring Mailboxes,CN=Microsoft Exchange System Objects,...
        $monroot = [adsi]("LDAP://" + ($monmailboxes[0].DistinguishedName -split ",",2)[1])

        if ( -not [adsi]::Exists( $monroot.Path ) ) { throw("Monitoring Mailboxes container doesn't exist!") }

        # Find all Exchange Servers and show versions
        $exservers = Get-ExchangeServer
        Write-Host -Fore:Yellow "Destination servers:"
        $exservers | Select Name,AdminDisplayVersion,ExchangeVersion | Out-Host

        # Find all Health Manager services
        Write-Host -Fore:Yellow "Find all Microsoft Exchange Health Manager services"
        $HMservices = $exservers | % { Get-Service "Microsoft Exchange Health Manager" -ComputerName $_.Name -ErrorAction SilentlyContinue }
        # and stop them
        Write-Host -Fore:Yellow "Stop Microsoft Exchange Health Manager services"
        $HMservices | % {
                            Write-Host -Fore:Yellow "Stopping"
                            $_ | Select Status,MachineName,Name,DisplayName | ft -AutoSize
                            $_.Stop()
                        }

        # Disable all monitoring mailboxes
        Write-Host -Fore:Yellow "Disable all monitoring mailboxes"
        $monmailboxes | Disable-Mailbox -Confirm:$false

        # Delete all monitoring mailboxes
        Write-Host -Fore:Yellow "Delete all monitoring mailboxes"
        $monroot.Children | % {
                                $_.DeleteTree()
                                #$monroot.Children.Remove($_)
                              }
        $monroot.CommitChanges()

        # Waiting inter-site replication
        Write-Host -Fore:Yellow "Waiting inter-site replication"
        Start-Sleep -Seconds 15

    }
    End
    {
        # Start Microsoft Exchange Health Manager services
        Write-Host -Fore:Yellow "Start Microsoft Exchange Health Manager services"
        $HMservices | % {
                            Write-Host -Fore:Yellow "Starting"
                            $_ | Select Status,MachineName,Name,DisplayName | ft -AutoSize
                            $_.Start()
                        }
        Write-Host -Fore:Yellow "Waiting service start: 1 minute"
        Start-Sleep -Seconds 60

        # Check Health Manager service status
        Write-Host -Fore:Yellow "Check Health Manager service status"
        $exservers | % { Get-Service "Microsoft Exchange Health Manager" -ComputerName $_.Name -ErrorAction SilentlyContinue }
    }

}
Реклама

комментария 3

  1. […] простой путь устранения проблемы это пересоздать почтовые ящики мониторинга скриптом, кото…. (Либо скачать в TechNet Gallery) (Если вы просто хотите […]

  2. «В блоке разработчиков Exchange Server» В блоге только )

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: