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

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

 

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.

Was denken Sie?