Das Commandlet Get-Mailbox ist mit Sicherheit einer der ersten Befehle sein, mit dem man in der Exchange Management Shell anfängt und ist stets ein treuer Begleiter. Er liefert uns Informationen bzw. Eigenschaften von Postfächern. Dieser recht einfache Befehl wird sowohl zum Auslesen der Postfach-Metadaten verwendet als für komplexe Mailbox Reports. Die Ausgabe von Get-Mailbox kann nämlich über die Pipe (|) an weitere Befehle übergeben werden (Pipelining).
Fangen wir mit einem einfachen und praktischen Beispiel an.
Get-Mailbox -<Strg + Leertaste>
Wer alle Parameter eines Befehls als Vorschau einsehen möchte, dem ist nach dem Minuszeichen mit Strg+Leertaste gut beraten:
Get-Mailbox *honig*
gibt uns eine Ausgabe, die auf die Zeichenkette „honig“ im Wildcard-Format basiert:
Das selbe Ergebnis erreichen wir mit einem Where-Filter auf Displayname:
Get-Mailbox | where Displayname -match "honig"
Eine andere Schreibweise erfolgt mit der mit der geschweiften Klammer. Hierbei können auch mehrere Bedingungen verwendet werden:
Get-Mailbox | where {$_.Displayname -match "honig"}
Praktisch ist auch das sogenannte „ambiguous name resolution“, kurz ANR:
Get-Mailbox -anr honig
Zu guter Letzt ist der Parameter Filter ein guter Begleiter:
Get-Mailbox -Filter {Displayname -like "*Honig*"}
Das aufgeführte Commandlet gibt uns z.B. 4 Attribute bzw. Eigenschaften aus:
Get-Mailbox Susi| select Name, Alias,ServerName,ProhibitSendQuota
Die Ausgabe können wir als Liste ausgeben lassen:
Get-Mailbox Susi| select Name, Alias,ServerName,ProhibitSendQuota | Format-List
Alle Attribute eines Postfaches geben wir mit diesem Befehl aus. Das Sternchen-Symbol (Wildcard) ist ein Platzhalter für alle Eigenschaften:
Get-Mailbox Susi| select *
Die Ausgabe können wir seitenweise mit „more“ ausgeben und die Spacetaste zum weiterblättern verwendet:
Get-Mailbox Susi| select * | more
Eine Selektion auf bestimmte Attribute, um Informationen wie z.B. das Erstellendatum oder das letzte Änderungsdatum auszugegeben, wird wie folgt durchgeführt:
Get-Mailbox Susi| select *when*
Die Ausgabe von Get-Mailbox Susi gibt uns ein Objekt zurück, welches wir mit Get-Member näher betrachten können:
Get-Mailbox Susi| Get-Member
Das Objekt enthält die oben aufgeführten Eigenschaften bzw. Attribute (Property) und Methoden (Method). Property sind die Attribute, die wir mit select bzw. Select-Object selektieren. z.B:
Get-Mailbox Susi| Select-Object WhenChanged
Auf die Properties können wir genauso mit der Punkt-Notation auf die Werte zurückgreifen. Die Syntax ist hierbei wie folgt aufgebaut:
(Get-Mailbox Susi).WhenChanged
Warum unterscheidet sich hier die Ausgabe? Das hängt damit zusammen, dass hier unterschiedliche Objekt-Typen zurückgegeben werden. Select-Object gibt uns ein PSCustomObject zurück während die Punkt-Notation auf das Attribut WhenChanged ein Objekt-Typ System.Date zurückgibt.
Mit dem Objekt-Typ System.Date können wir auf Datum relevante Attribute und Methoden zurückgreifen, um z.B das Jahr des Änderungsdatums auszugeben:
(Get-Mailbox Susi).WhenChanged.Year
Um zu ermitteln, wie viele Postfächer zu bestimmten Zeiten verändert wurden, könnte man wie folgt vorgehen:
(Get-Mailbox -ResultSize 20).WhenChanged | Group-Object | Sort-Object Name -Descending
Nachfolgend lassen wir uns die Postfächer aus der Datenbank DB01 ausgeben, auf denen in den letzten 30 Tage nicht zugegriffen wurde. Bei der Abfrage werden die Postfächer mit dem Anzeigename System, Discovery, In-Place ausgeschlossen:
Get-MailboxStatistics -Database DB01 | Where {
$_.DisplayName -notlike "*System*" -and `
$_.DisplayName -notlike "*Discovery*" -and `
$_.DisplayName -notlike "*In-Place*" -and `
$_.LastLogonTime -lt (Get-Date).AddDays(-30)} | ft -Autosize
Als nächstes lassen wir uns Zahlen aus den Postfächern ausgeben. Das Commandlet Select-Object erlaubt uns in der Ausgabe eine benutzer-definierte Abfrage zu integrieren:
Select-Object @{
Name=Spaltenname;
Expression={<Befehl $_.Referenz-Attribut>}
}
Wir möchten in der Ausgabe von Get-Mailbox zusätzlich das Attribut ItemCount von Get-MailboxStatistics implementieren. Dieses Attribut wird z.B. von Get-Mailbox nicht zur Verfügung gestellt:
Das Attribut soll als Anzahl Elemente ausgegeben werden:
Get-Mailbox -ResultSize Unlimited | Select Name,RecipientType,RecipientTypeDetails, @{
name="Anzahl Elemente"; `
expression={(Get-MailboxStatistics $_.Name).ItemCount}
} | Sort "Anzahl Elemente" -Descending | ft -Autosize
Das benutzer-definierte Attribut wird in der Form einer Hash-Table implementiert. Die Struktur der Hash-Table wird als Werte-Paar definiert:
@{
name = "Anzahl Elemente"; `
expression = {(Get-MailboxStatistics $_.Name).ItemCount}
}
Der erste Part wird durch das Label (Name) gekennzeichnet:
name="Anzahl Elemente";
Der zweite Part wird als Expression definiert. In der Expression wird z.B. ein Befehl oder eine Kalkulation durchgeführt:
expression={(Get-MailboxStatistics $_.Name).ItemCount}
Wir gehen nun einen Schritt weiter und rechnen die Ausgabe von „TotalItemSize“ in MB um:
Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics |
Select DisplayName,MailboxTypeDetail,DeletedItemCount, `
@{
name=”TotalItemSize (MB)”; `
expression={
[math]::Round(($_.TotalItemSize.ToString().Split(“(“)[1].Split(” “)[0].Replace(“,”,””)/1MB),2)
}
}, ItemCount | Sort “TotalItemSize (MB)” -Descending | ft -Autosize
Im nächsten Beispiel möchten wir mit Hilfe einer foreach-Schleife eine Domain als Alias hinzufügen und wieder entfernen.
SMTP Alias hinzufügen:
$mailboxes = Get-Mailbox -OrganizationalUnit "hz.local/ROOT_HZ/PROD/USERS"
foreach ($mailbox in $mailboxes) {
Set-Mailbox $($mailbox).alias -EmailAddresses @{
add = "$($mailbox.alias)@exchange.local"
} -Confirm
}
SMTP Alias entfernen:
$mailboxes = Get-Mailbox -OrganizationalUnit "hz.local/ROOT_HZ/PROD/USERS"
foreach ($mailbox in $mailboxes) {
Set-Mailbox $($mailbox).alias -EmailAddresses @{
remove = "$($mailbox.alias)@exchange.local"
} -Confirm
}
Yay neuen Beitrag! 😍 So viele nützliche Informationen kompakt und einfach geklärt. Danke vielmals und freue mich auf weitere Beiträge.
Hi Maryam, danke für dein Feedback.