Kategorien
Exchange PowerShell Windows Server

Exchange Search Index reparieren

Heute morgen begrüßte mich ein defekter Exchange Search Index beim Kunden. Den Suchindex von Hand zu reparieren kann jeder und das macht keinen Spaß. 🙂

Daher hier ein kleines PowerShell Script, welches den Exchange Search Index auf einem nicht DAG Member Exchange (hoffentlich) wieder in Gang setzt.

# Repair-FailedExchangeSearchIndex
# Das Script repariert (hoffentlich) den Exchange Search Index. :)

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$FailedIndexDBs = (Get-MailboxDatabaseCopyStatus | ? ContentIndexState -IMatch "Failed").DatabaseName
if($FailedIndexDBs){
    if($(Get-Service HostControllerService).Status -ine "Stopped"){ Stop-Service HostControllerService }
    if($(Get-Service MSExchangeFastSearch).Status -ine "Stopped"){ Stop-Service MSExchangeFastSearch }

    foreach($FailedIndexDB in $FailedIndexDBs){
        $ExDB = Get-MailboxDatabase $FailedIndexDB
        $ExDBBasePath = $([string]$ExDB.EdbFilePath).Substring(0, $([string]$ExDB.EdbFilePath).Length - $($ExDb.Name + ".edb").Length)
        $ExDBSearchIndexPath = $ExDBBasePath + $ExDB.Guid + "12.1.Single"
        Rename-Item -Path $ExDBSearchIndexPath -NewName $($ExDBBasePath + "zz_" + $ExDB.Guid + "12.1.Single" + "_DEFEKT")
    }

    Start-Service MSExchangeFastSearch
    Start-Service HostControllerService
}

Was passiert denn hier im Script?

  1. Das Exchange Management PowerShell SnapIn wird geladen. Ansonsten stehen die Exchange CMDlets nicht zur Verfügung.
  2. Get-MailboxDatabaseCopyStatus sucht uns die Namen der Datenbanken mit dem Status „Failed*“
  3. Sofern es Exchange Datenbanken in diesem Zustand gibt, werden die beiden Dienste („Microsoft Exchange Search Host Controller“ und „Microsoft Exchange-Suche“), sofern Sie ausgeführt werden mit Stop-Service beendet.
  4. Sodann kümmern wir uns in einer foreach-Schleife um die erste Datenbank und holen uns die Informationen mit Get-MailboxDatabase.
  5. Anhand des Datenbank-Pfades (EdbFilePath) bauen wir uns den Basispfad zusammen an welchem der Search Index liegt. Da der Search Index sich aus der GuID der Datenbank sowie „12.1.Single“ zusammensetzt, haben wir auch schon den benötigten Ordner gefunden.
  6. Mit Rename-Item wird der defekte Suchindex zur Sicherheit einfach umbeannt.
  7. Zu guter Letzt werden die Exchange Such Dienste (Start-Service) wieder gestartet.
  8. Yay! 🙂

An dieser Stelle noch der Hinweis, dass der ContentIndexState nach dem Starten der Dienste noch eine ganze Weile im Status „Failed“ stehen bleiben kann. Danach geht er über den Status „Unknown“ in den Status „Crawling“. Jetzt ist wieder Geduld gefragt bis der Status sich dann hoffentlich in „Healthy“ verwandelt.

Sollte sich der Suchindex nicht überzeugen lassen, würde ich im nächsten Step eine neue, leere Exchange Datenbank anlegen. Diese sollte dann den ContenIndexState „Healthy“ aufweisen. Ist dies der Fall kann eine Testmailbox verschoben und der ContenIndexState beobachtet werden. Bleibt er „Healthy“ -> Weitere Mailboxen verschieben -> Bleibt er „Healthy“ -> Weitere Mailboxen verschieben -> usw. usf.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.