Exchange Datenbank Quotas mit der PowerShell

Im letzten Blogeintrag haben wir uns angesehen, wie man den Linux Befehlt grep mit der PowerShell abbilden kann.  

In diesem Blogeintrag komme ich zur ursprünglichen Idee für diesen Blog zurück: Die Unterschiede zwischen der PowerShell auf einen deutschen und einem englischen Server.

Aufgefallen ist es auf einem Exchange Server mit einem deutschen Windows Server 2016 unter der Haube.

Auf einem Exchange Server sollte man immer Quotas auf die Datenbanken setzen, um ein Überlaufen der Volumes zu verhindern (unabsichtlich durch einen Mail Loop oder absichtlich durch eine externe DoS Attacke).

Dafür müssen 3 Attribute gesetzt werden:

  • IssueWarningQuota = Ab dieser Mailbxgröße wird der User täglich gewarnt
  • ProhibitSendQuota = Der User kann noch Mails empfangen, aber keine neuen versenden
  • ProhibitSendReceiveQuota = Der User kann weder versenden, noch empfangen. Die Mailbox ist "voll"

Auf einem englischsprachigen Server geht das problemfrei folgendermaßen:

Set-MailboxDatabase -Identity -Identity EX16-DB01 -IssueWarningQuota 4GB -ProhibitSendQuota 4.5GB -ProhibitSendReceiveQuota 6GB

Set-MailboxDatabase -Identity -Identity EX16-DB01 -IssueWarningQuota 4GB -ProhibitSendQuota 4.5GB -ProhibitSendReceiveQuota 6GB

Auf einem deutschsprachigen Server kommt dann folgende Fehlermeldung:

Der Wert von Eigenschaft 'ProhibitSendQuota' muss kleiner als oder gleich dem Wert von Eigenschaft 'ProhibitSendReceiveQuota' sein. ProhibitSendQuota: '45 GB (48,318,382,080 bytes)', ProhibitSendReceiveQuota: '6 GB (6,442,450,944 bytes)'.   

 

Aha: die 4.5 GB wurden als 45 GB interpretiert - und das geht nicht, da der ProhibitSendQuota Wert kleiner als der ProhibitSendReceiveQuota Wert sein muß.

Stimmt ja: In Der PowerShell Culture Definition für Deutschland steht, dass Dezimalzahlen mit Komma und nicht mit Punkt arbeiten.

Versuch 2:

Set-MailboxDatabase -Identity -Identity EX16-DB01 -IssueWarningQuota 4GB -ProhibitSendQuota 4,5GB -ProhibitSendReceiveQuota 6GB

Wieder ein Fehler:

Die Argumenttransformation für den Parameter "ProhibitSendQuota" kann nicht verarbeitet werden. Der Wert "System.Collections.ArrayList" vom Typ "System.Collections.ArrayList" kann nicht in den Typ "Microsoft.Exchange.Data.Unlimited`1[Microsoft.Exchange.Data.ByteQuantifiedSize]" konvertiert werden

 

Der Befehl interpretiert die 4,5 als Zahlenliste mit 2 Werten = ein Array und das passt dann auch nicht.

Der Workaround: Ich erzeuge mir eine Variable mit dem passenden Wert

$viereinhalb = 4.5 * 1GB

Dieser Wert ist vom Datentyp Double und stellt die 4,5 GB in Byte dar.

 

Jetzt kann ich fehlerfrei mithilfe der Variable $viereinhalb die Datenbank Quotas setzen

Set-MailboxDatabase -Identity EX16-DB01 -IssueWarningQuota 4GB -ProhibitSendQuota $viereinhalb -ProhibitSendReceiveQuota 6GB

$viereinhalb = 4.5 * 1GB
Set-MailboxDatabase -Identity EX16-DB01 -IssueWarningQuota 4GB -ProhibitSendQuota $viereinhalb -ProhibitSendReceiveQuota 6GB

 

Im nächsten Blogeintrag beschäftigen wir uns damit, wie man den Linux bash Befehl uniq zum Entfernen von doppelten EInträgen mit der PowerShell umsetzen kann.

2 Kommentare

  • Antworten Mathias |

    Hallo, guter Artikel. Ich bin auch schon über dieses „Problem“ gestolpert.
    Eine Frage hätte ich an Sie: wie kann man mittels Powershell die Quotas setzen, wenn man zwischen Nutzer-Postfächern und Funktionspostfächern unterscheiden muss. Eine weitere Unterscheidung: bei Nutzerpostfächern sollen alle die Postfächer auf eine bestimmte Größe geändert werden, die kleiner sind als 1GB. Alle die Größer sind und keine Nutzerpostfächer sind, sollen nicht geändert werden.
    Ich wäre für einen Tipp sehr dankbar.

    • Antworten Boris Birneder |

      Hallo Mathias,
      die Unterscheidung zwischen Nutzer- und Funktionspostfach geht über das Attribut ‚RecipientTypeDetails‘

      D.h. so bekommst du alle Nutzermailboxen mit Warnquota <= 1GB angezeigt

      Get-Mailbox -ResultSize unlimited -Filter {RecipientTypeDetails -eq „UserMailbox“} | Where-Object {$_.IssueWarningQuota -le 1GB}

      Und so vergrößerst du z.B. die Werte auf 5/6/7 GB

      Get-Mailbox -ResultSize unlimited -Filter {RecipientTypeDetails -eq „UserMailbox“} | Where-Object {$_.IssueWarningQuota -le 1GB} | Set-Mailbox -IssueWarningQuota 5GB -ProhibitSendQuota 6GB -ProhibitSendReceiveQuota 7GB

      Aber nicht vergessen, dass das nur funktioniert, wenn das Attribut ‚UseDatabaseQuotaDefaults‘ auf $false steht, sonst greifen die Datenbank Quotas

      Viel Erfolg

Was denken Sie?

Pflichtfelder sind mit einem * markiert.