24. Mai 2024

Get-Mailbox Praxisbeispiele

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.

PowerShell
Get-Mailbox -<Strg + Leertaste>

Wer alle Parameter eines Befehls als Vorschau einsehen möchte, dem ist nach dem Minuszeichen mit  Strg+Leertaste gut beraten:

PowerShell
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:

PowerShell
Get-Mailbox | where Displayname -match "honig"

Eine andere Schreibweise erfolgt mit der mit der geschweiften Klammer. Hierbei können auch mehrere Bedingungen verwendet werden:

PowerShell
Get-Mailbox | where {$_.Displayname -match "honig"}

Praktisch ist auch das sogenannte „ambiguous name resolution“, kurz ANR:

PowerShell
Get-Mailbox -anr honig

Zu guter Letzt ist der Parameter Filter ein guter Begleiter:

PowerShell
Get-Mailbox -Filter {Displayname -like "*Honig*"}

Das aufgeführte Commandlet gibt uns z.B. 4 Attribute bzw. Eigenschaften aus:

PowerShell
Get-Mailbox Susi| select Name, Alias,ServerName,ProhibitSendQuota

Die Ausgabe können wir als Liste ausgeben lassen:

PowerShell
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:

PowerShell
Get-Mailbox Susi| select *

Die Ausgabe können wir seitenweise mit „more“ ausgeben und die Spacetaste zum weiterblättern verwendet:

PowerShell
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:

PowerShell
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:

PowerShell
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:

PowerShell
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:

PowerShell
(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:

PowerShell
(Get-Mailbox Susi).WhenChanged.Year

Um zu ermitteln, wie viele Postfächer zu bestimmten Zeiten verändert wurden, könnte man wie folgt vorgehen:

PowerShell
(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:

PowerShell
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:

PowerShell
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: 

PowerShell
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:

PowerShell
@{
 name = "Anzahl Elemente"; ` 
 expression = {(Get-MailboxStatistics $_.Name).ItemCount}
}

Der erste Part wird durch das Label (Name) gekennzeichnet:

PowerShell
name="Anzahl Elemente";

Der zweite Part wird als Expression definiert. In der Expression wird z.B. ein Befehl oder eine Kalkulation durchgeführt:

PowerShell
expression={(Get-MailboxStatistics $_.Name).ItemCount}

Wir gehen nun einen Schritt weiter und rechnen die Ausgabe von „TotalItemSize“ in MB um:

PowerShell
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:

PowerShell
$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:

PowerShell
$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
}
0 0 votes
Article Rating
Abonnieren
Benachrichtige mich bei
guest
2 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Maryam

Yay neuen Beitrag! 😍 So viele nützliche Informationen kompakt und einfach geklärt. Danke vielmals und freue mich auf weitere Beiträge.

2
0
Would love your thoughts, please comment.x