Microsoft Exchange spezifische Powershell cmdlets.
Standardverzeichnis für Echange 2010 Scripts:
C:\Program Files\Microsoft\Exchange Server\V14\Scripts
Weitere wichtige Scripte:
Get-DAGHealth.ps1
Test-ExchangeServerHealth.ps1
Auswertung gesendeter Mails von einem Postfach
Get-MessageTrackingLog -ResultSize Unlimited -EventId "Send" -Sender "sender@domain.de" | Select-Object Timestamp,ServerHostname,ClientHostname,Source,EventId,@{ e={[string]::join(';', ($_.Recipients))};l='Recipients'} | export-csv -notypeinformation -encoding UTF8 -delimiter ";" Auswertung.csv
Exchange Version abfragen
Get-ExchangeServer | select Name, AdminDisplayVersion
OWA aktivieren/deaktivieren
Set-CasMailbox -Identity "Benutzername" -OWAEnabled $false
Benutzer auflisten, die auf ein gegebenes Benutzerpostfach Vollzugriff haben
Get-MailboxPermission [username]| ? {$_.AccessRights -match "FullAccess" -and $_.IsInherited -eq $False} | where { ($_.user.tostring() -ne "NT-AUTORITÄT\SELBST") } | select User
Benutzerpostfächer auflisten, auf die ein gegebener Benutzer Vollzugriff hat
$Postfächerp = Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission | Where-Object { $_.User.RawIdentity -eq "domain\user" } Get-Mailbox -Resultsize Unlimited | Get-MailboxPermission -User [Benutzername]| ? {$_.AccessRights -match "FullAccess" -and $_.IsInherited -eq $False} | Select Identity
Prüfen ob eine E-Mail-Adresse bereits vergeben ist
Get-Recipient -resultSize unlimited | select name -expand emailAddresses | where {$_.smtpAddress -eq "adr@domain.com"} | Format-Table name, smtpaddress
Abwesenheitsnotiz setzen
Get-MailboxAutoReplyConfiguration Set-MailboxAutoReplyConfiguration -Identity -AutoReplyState Enabled|Disabled|Scheduled Set-MailboxAutoReplyConfiguration -Identity –AutoReplyStateScheduled –StartTime 01.01.2012 –StopTime 02.01.2012
Postfachgröße ermitteln
Get-MailboxStatistics -identity | sort $_.TotalItemSize | FT DisplayName,TotalItemSize Get-MailboxStatistics -server | sort $_.TotalItemSize | FT DisplayName,TotalItemSize Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | Select-Object DisplayName,TotalItemSize -First 3
Freien Whitespace ermitteln
Exchange 2010 kann seine Datenbanken nicht verkleinern, wenn Mailboxen verschoben werden. Stattdessen wird der frei gewordene Bereich markiert. Das nennt man in diesem Kontext Whitespace. Die Größe des vorhandenen Whitespaces pro Datenbank gibt man mit folgendem Befehl aus:
Get-MailboxDatabase -status | Select-Object Server,Name,AvailableNewMailboxSpace | sort AvailableNewMailboxSpace -desc Get-MailboxDatabase -status | Sort-Object AvailableNewMailboxSpace| ft Name,DatabaseSize,AvailableNewMailboxSpace
Kopiert man nun eine Mailbox in einer Datenbank , deren Whitespace größer ist, als die Mailboxgröße, sollte die Datenbankgröße nicht anwachsen. ACHTUNG: Es werden dabei aber Transaction Logs geschrieben. Diese werden dann mit dem nächsten Backup entfernt.
Mailbox Suchindex aktualisieren
Wird Outlook im cached Modus betrieben ist der Windows Suchdienst für die Indexierung verantworlich (muss bei älteren Serverversionen als Rolle installiert werden). Im Online Modus wird die Suchanfrage an Exchange wieter gegeben. Gibt es in diesem Fall Probleme bei der Suche kann man den Index für die Mailbox neu erstellen.
New-MoveRequest benutzer@domain
Mit dem Befehl verschiebt man die Mailbox in eine andere Datenbank. Dabei wird der Suchindex neu erstellt. Das ist auch die offizielle Vorgehensweise bei Problemen mit der Indizierung. ACHTUNG: es werden eine Menge Transaction Logs geschrieben. Mindestens das Doppelte der Postfachgröße sollte auf der Datenbankpartition frei sein.
Wie weit die Aktion abgeschlossen ist kann man sehen mit dem Befehl
Get-MoveRequestStatistics benutzer@domain
Datenbank Cache aktualisieren
Get-MailboxDatabase | Clean-MailboxDatabase
Deaktivierte Konten anzeigen
Get-MailboxDatabase | Get-MailboxStatistics | Where{ $_.DisconnectDate -ne $null } |fl DisplayName, Database, Identity, DisconnectReason
Datenbank Größe
Get-MailboxDatabase -Status | select ServerName,Name,DatabaseSize | sort-object Databasesize
Datenbank Move History
(Get-MailboxStatistics -Identity -IncludeMoveHistory -IncludeMoveReport -Archive).MoveHistory
Datenbank Move Request (ArchiveOnly)
New-MoveRequest -Identity -ArchiveOnly -ArchiveTargetDatabase
Datenbank Move Request (Nur Benutzerpostfach)
New-MoveRequest -Identity -PrimaryOnly -TargetDatabase
Alle Benutzer mit aktiviertem Archivpostfach auflisten
Get-Mailbox | where {$_.ArchiveDatabase -ne $null}
Alle Benutzer mit aktiviertem Archivpostfach auflisten und Ausgabe formatieren
Get-Mailbox | where {$_.ArchiveDatabase -ne $null} | ft name, archivedatabase, archivename, archivequota, archivewarningquota -AutoSize
Datenbanken mit aktivierter Umlaufprotokollierung ermitteln
get-MailboxDatabase | where {$_CircularLoggingEnabled -eq $true}
Postfachgröße für Benutzerpostfach ermitteln
Get-MailboxStatistics | fl
Postfachgröße für Archivpostfach ermitteln
Get-MailboxStatistics -archive | fl
Exchange Fehler und Probleme
Test-ServiceHealth Test-ReplicationHealth Test-Exchangesearch Get-MailboxDatabaseCopyStatus Get-MailboxDatabaseCopyStatus –Server EX1 | fl Name,*Index*
Zeigt an ob der ContextIndex Status OK ist. Wenn nicht, muss die Datenbank angehalten werden und Update-MailboxDatabaseCopy ausgeführt werden.
Get-MailboxDatabaseCopyStatus * | where {$_.ContentIndexState -eq "Failed"} | Update-MailboxDatabaseCopy -CatalogOnly
Bei Performanceproblemen die Benutzungsstatistik der Datenbanken ausgeben:
Get-StoreUsageStatistics -Database DBNAME | Sort-Object LogRecordBytes -desc | Select-Object -First 10 | ft DigestCategory, *guid, LogRecordBytes, *time* -auto
Die anzahl der Mailboxitems pro Postfach ausgeben. Darf bei Exchange 2010 nicht mehr als 100.000 betragen, bei Exchange 2007 nicht mehr als 50.000.
Get-Mailbox -database DBNAME | Get-MailboxStatistics | Sort-Object ItemCount -descending |Select-Object DisplayName,ItemCount,@{name="MailboxSize";exp={$_.totalitemsize}} -first 10 | Convertto-Html | out-File c:\temp\report.htm
Bei fehlerhaftem ContentIndex. Im Eventlog kann man den Status der Aktion ablesen. Die Event ID 109 des MSExchange Suchindizierungsdienstes zeigt den Start an, die Event ID 110 das Ende. Dauert pro Datenbank ca. 2 Minuten bei 80GB.
C:\Program Files\Microsoft\Exchange Server\V14\Scripts\ResetSearchIndex.ps1 -force dbname
Löscht den Catalog Index und startet ein erneutes Seeding. Der MS Exchange Suchdienst wird hierfür kurz angehalten.
Update-MailboxDatabaseCopy "Server\Database" -SourceServer "Name of the server whos copy was reset" -CatalogOnly
Um die Datenbankkopie, deren Index nicht neu erstellt wurde, mit der Kopie mit dem neuen Index zu synchronisieren. https://social.technet.microsoft.com/Forums/ie/en-US/b4c7879a-1867-41f1-80d7-11705ce9e111/questions-about-resetsearchindexps1?forum=exchange2010.
iisreset
Bei änderungen am Exchange muss der IIS manchmal resettet werden oder wenn die Management Console nicht startet.
MSExchange Common Event 106 (Custom counters file view is out of memory)
Due to BLOG entry http://social.technet.microsoft.com/Forums/en-US/exchange2010/thread/079598ef-08fe-49b6-af5f-8920d8b34a39 (thanx Brian) we checked the registry permissions of ‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ExchangeServer\v14\Transport‘.
The permissions on this Regitry Key were incorrectly ordered! We don’t know the reason why.
1. Corrected the registry permissions of the mentioned Key to Administrators, SYSTEM, NETWORKSERVICE: full control
2. Reloaded the following performance counters using EMS and add-pssnapin Microsoft.Exchange.Management.PowerShell.Setup
new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\AdminAuditPerfCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ResourceHealthPerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ThrottlingPerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\MiddleTierStoragePerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\IsMemberOfResolverPerfCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ADRecipientCachePerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\RpcClientAccessPerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ExchangeTopologyPerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ExSearchPerformanceCounters.xml" new-perfcounters –definitionfilename "C:\Program Files\Microsoft\Exchange Server\V14\Setup\Perf\ExSearchCatalogPerformanceCounters.xml"
Datenbank Cache aktualisieren
Get-MailboxDatabase | Clean-MailboxDatabase
Deaktivierte Konten anzeigen
Get-MailboxDatabase | Get-MailboxStatistics | Where{ $_.DisconnectDate -ne $null } |fl DisplayName, Database, Identity, DisconnectReason
legacyExchangeDN Anzeigen
Get-Mailbox <username> | Format-List Identity, legacyExchangeDN