Exchange Management Shell

Neben der grafischen Version der E2007:ESM gibt es natürlich auch die Management Shell, welche die Verwaltung von Exchange 2007 erlaubt. Auf dieser Seite beschreibe ich einige nützliche und häufig genutzte Befehle, die vielleicht nicht so eingängig sind. Wenn Sie mehrere Server installieren haben, dann werden Sie sich sehr schnell eine eigene Sammlung oder gar ein PS1-Skript anlegen, um ihren "Firmenstandard" durchzusetzen.

Eine sehr gute Übersicht der Befehle und ihrer Anwendung können Sie auch offline einfach mitnehmen und lesen
Exchange 2007 Hilfe offline (Mai 2007) EN http://www.microsoft.com/downloads/details.aspx?familyid=555F5974-9258-475A-B150-0399B133FEDE&displaylang=en

Globale Einstellungen

Starten Sie die  PowerShell einfach nur über "Ausführen - PowerShell", dann werden Sie feststellen, dass die ganzen Exchange CMDLets nichts zur Verfügung stehen. Sie müssen die Exchange Management Shell über das Startmenü starten, so dass die zusätzlichen Komponenten eingebunden sind.

Dennoch werden Sie feststellen, dass besonders die Administration über mehrere Domänen hinweg manchmal nicht wie gewünscht funktioniert. Das liegt aber daran, dass die PowerShell per Default die lokale Domäne als "Suchfokus" hat. Das merken Sie z.B.: daran, dass ein "Get-DistributionGroupMember" per Default nur den Domain-Kontext der eigenen Domäne abfragen und so nicht alle Mitglieder der Gruppen liefert.

Dieses Verhalten lässt sich über den Befehl "$AdministratorenessionADSettings" anzeigen (Property "ViewEntireForest")

AdminSessionADSettings

Um also die PowerShell dazu zu bringen, den kompletten Forest du verarbeiten muss man nur folgende Zeile ausführen:

"$AdministratorenessionADSettings.ViewEntireForest=$true"

Damit liefern nun auch "Get-DistributionGroupMember" und viele andere Befehle die komplette Information.

Alles rund um SMTP / POP3 / IMAP4

Wer SMTP und Internet Clients einrichtet, der wird erkennen, dass Exchange 2007 sehr viel pingeliger ist. Daher kann man z.B. den internen SMTP-Receiver etwas anpassen. Details siehe auch E2K7 POP3/IMAP4

set-receiveconnector servername -defaultdomain firma.de

Get-transportserver | Set-Transport -externalPostmasterAddress admin@firma.de

Get-ReceiveConnector "connectorname" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "ms-Exch-SMTP-Accept-Any-Recipient"

set-pop3settings -login Plaintextlogin

Rechte auf Postfachspeicher und Postfächer

Folgende Befehle helfen bei der Vergabe von Rechten auf einzelne Postfächer oder Postfachspeicher, z.B. für Virenscanner, Archivlösungen, SingleMailboxExports, EXMERGE, Blackberry etc.

Add-ADPermission -Identity "Store" -User "User/group" -ExtendedRights Receive-As

Add-MailboxPermission -Identity "Postfac" -User Username -Accessright Fullaccess -InheritanceType all

öffentlichen Ordner

Da in der Exchange 2007 Management Console vor Service Pack 1 keinerlei Unterstützung für die Verwaltung von öffentlichen Ordnern geboten wird, habe ich hierzu eine gesonderte Seite erstellt:

Messagetracking

Um die Pfade und Größe des Message Trackings zu steuern, müssen Sie die PowerShell bemühen.

Set-Transportserver -messagetrackinglogpath D:\LOGS -Messagetrackingsize 1000 MB
Set-Transportserver -MessagetrackingLogMaxDirectorySize 1000 MB
Set-Mailboxserver -messagetrackinglogpath D:\LOGS
Set-Mailboxserver -MessagetrackingLogMaxDirectorySize 1000 MB

Routing und Hubs

Exchange 2007 nutzt die "Active Directory Standorte und Dienste" zur Ermittlung des Routings (Kosten und Wege). Die Kosten des AD-Sitelinks können mit Exchange Kosten überschrieben werden und Sites können zu "HUB-Sites" definiert werden. Dazu gibt es folgende Befehle:

[PS] C:\>Get-ADSite

Name                           HubSiteEnabled
----                           --------------
Paderborn                      False
Get-AdSiteLink

Name                      ADCost     ExchangeCost    Sites
----                      ------     ------------    -----
DEFAULTIPSITELINK         100        100             {Paderborn}

Eine Hubsite wird beim Routing nicht übergangen sondern als Relay genutzt. Die Kosten für einen Connector können abweichend definiert werden. Folgende Befehle sind dazu einzusetzen.

set-adsitelink -identity DEFAULTIPSITELINK -ExchangeCost 100
Set-ADSite -Identity Sitename -HubSiteEnabled $true

Der Einsatz von Hubsites ist z.B. interessant, um an zentralen Punkten einen Virenscan oder z.B. eine Archivierung einzuführen.

Statistiken

Während man im Exchange 2000/2003 System Manager auch über die Postfachressourcen schön sehen konnte, wie groß ein Postfach ist, geht das bei Exchange 2007 noch nicht über die Management Console. Auch hier gibt es die CMDLets natürlich in der Exchange Management Shell.

Ein einfaches "Get-MailboxStatistics" ist der Ansatzpunkt für umfangreiche Auswertungen:

[PS] C:\>Get-MailboxStatistics fcarius | fl

AssociatedItemCount : 299
DeletedItemCount : 1946
DisconnectDate :
DisplayName : Carius, Frank
ItemCount : 49197
LastLoggedOnUserAccount : MSXFAQ\fcarius
LastLogoffTime :
LastLogonTime : 01.04.2007 20:31:10
LegacyDN : /O=NET AT WORK GMBH/OU=PADERBORN/CN=RECIPIENTS/CN=FCARIUS
MailboxGuid : xxxxxxxxxxxxxxxxxxxxxxxxxxx
ObjectClass : Mailbox
StorageLimitStatus : BelowLimit
TotalDeletedItemSize : 23271121B
TotalItemSize : 1230766982B
Database : NAWSV002\First Storage Group\Mailbox Database
ServerName : NAWSV002
StorageGroupName : First Storage Group
DatabaseName : Mailbox Database
Identity : xxxxxxxxxxxxxxxxxxxxxx
IsValid : True
OriginatingServer : nawsv002

Natürlich kann die PowerShell auch eine Liste aller Mailboxen mit deren Postfachdaten ausgeben. Ein einfaches "Get-MailboxStatistics" liefert schon die komplette Liste.

[PS] C:\>Get-MailboxStatistics

DisplayName               ItemCount    StorageLimitStatus         LastLogonTime
-----------               ---------    ------------------         -------------
Microsoft System Attendan 0                    BelowLimit   01.04.2007 20:48:58
t
Carius, Frank             49197                BelowLimit   01.04.2007 20:31:10
testUser3                 9                    BelowLimit   12.01.2007 16:38:49

Interessant wir das natürlich, wenn man weitere Felder mit ausgibt oder auch nach dem StorageLimitStatus filters oder gruppiert. z.B.

[PS] C:\>Get-MailboxStatistics fcarius | ft displayname,*ItemCount,total*

DisplayName   AssociatedItemCount DeletedItemCount ItemCount TotalDeletedItemSize TotalItemSize
                     
-----------   ------------------- ---------------- --------- -------------------- ------------
Carius, Frank           299                   1946     49197            23271121B  1230766982B

Wenn Sie bei "FT" noch die Option "-groupby" angeben, dann erhalten Sie die Liste entsprechend sortiert

[PS] C:\>Get-MailboxStatistics | ft displayname,*ItemCount,total* -GroupBy StorageLimitStatus

Diese Funktionen beschränken sich aber alle auf den Zugriff auf die Datenbank selbst. Erstmals erlaubt nun Exchange auch mit Bordmitteln einen Blick in die Postfächer.

[PS] C:\>Get-MailboxFolderStatistics fcarius | ft folderpath,name,itemsinfolder,
foldersize

FolderPath          Name                      ItemsInFolder FolderSize
----------          ----                      ------------- ----------
/                   Höchste Hierarch...                   0 1227B
/Antwort ausstehend Antwort ausstehend                    3 243589B
/Aufgaben           Aufgaben                            260 151378B
/Entwürfe           Entwürfe                             11 90746B
/Gelöschte Objekte  Gelöschte Objekte                     3 8577B
/Gesendete Objekte  Gesendete Objekte                 10702 356490666B
/Journal            Journal                             341 166231B
/Junk-E-Mail        Junk-E-Mail                           0 5883B
/Kalender           Kalender                           3045 13992384B
/Kontakte           Kontakte                           2358 3913219B
/Kontakte/Outloo... Outlook PCS                           1 3978B

Natürlich können Sie nun "GetMailbox" mit einem Pipesymbol an "Get-MailboxFolderStatistics" verketten und damit mehrere Postfächer entsprechend auswerten.

Wenn Sie also z.B. wissen wollen, Wie viele Mails sich wo in den "Junk-E-Mail" befinden, dann könnte folgender Aufruf nützlich sein.

[PS] C:\>get-mailbox | Get-MailboxfolderStatistics | 
  where {$_.Folderpath -match "/Junk-E-Mail"} | 
    ft identity,foldersize -AutoSize

Identity                                                 FolderSize
-------------------------------------------------------- ----------
netatwork.de/Abteilung/Technik/Carius, Frank\Junk-E-Mail 5883B

Exchange Lizenz per LDAP

Natürlich können Sie dann auch über die PowerShell die Exchange 2007 Lizenz eintragen.

set-exchangeserver `
    -Identity 'CN=SRV1,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),
     CN=Administrative Groups,CN=MSXFAQ,CN=Microsoft Exchange,CN=Services,CN=Configuration,
     DC=MSXFAQ,DC=DE' -ProductKey 'XXXXX-YYYYY-ZZZZZ-WWWW-VVVVV'

Die Lizenz ist aber nicht besonders "versteckt", sondern wird einfach auf dem Serverobjekt im Feld "msExchProductID" in einem konvertierten Format abgespeichert (z.B.: nnnnn-nnn-nnnnnnnn-nnnnn).

Weitere Links