sinzal
Goto Top

Suche Code zum Vergleich von Größe eines öffentlichen Ordners in Exchange 2016

Hallo Admins,

ich habe einen Exchange Server 2016 Standard (auf einem Windows Server 2016 Standard), auf dem ein Öffentlicher Ordner "Sammelstelle" liegt. In regelmäßigen Abständen soll per Skript getestet werden, ob das Postfach eine Größe von 1000 MB überschreitet, woraufhin ein Skript ausgeführt werden soll. Ich habe dafür ein bei einem Exchange Server 2010 genutztes Powershell-Skript abgeändert, das jedoch nicht anspringt, wenn der Grenzwert erreicht ist.
Das Skript ist folgendes:

$size1=Get-PublicFolderStatistics -identity “\Sammelstelle” | select Name, ItemCount, LastModificationTime, TotalItemSize
[string]$bob = $size1.TotalItemSize.Value
"$bob"  
 [int]$bill = $bob.TrimEnd(" bytes)").Split("(")[1] # The bytes part of the array.  
$bill = $bill/1mb # Convert into MB's 
if ($bill -ge 1000) {mein-skript.bat}
exit

Sieht jemand von Euch auf Anhieb einen Fehler, den ich dabei gemacht haben könnte?
"$bob" liefert mir eine leere Zeichenkette. ICh vermute, dass davor schon ein Fehler liegen kann.

Viele Grüße,
Sinzal

Content-Key: 436735

Url: https://administrator.de/contentid/436735

Printed on: April 19, 2024 at 14:04 o'clock

Mitglied: 139374
139374 Apr 04, 2019 updated at 18:36:47 (UTC)
Goto Top
Wundert mich ehrlich gesagt nicht bei dem String-zu-Bytes-Umwandel-Gebastel.
“\Sammelstelle”
Außerdem sind die Anführungszeichen um die "Identity" des Ordners nicht "konform".


Das Objekt .....TotalItemSize.Value hat Methoden zur direkten Umwandlung der Daten in uint64 Werte face-smile
TypeName: Microsoft.Exchange.Data.ByteQuantifiedSize

Name          MemberType Definition                                                                                                                     
----          ---------- ----------                                                                                                                     
CompareTo     Method     int CompareTo(Microsoft.Exchange.Data.ByteQuantifiedSize other), int IComparable.CompareTo(System.Object obj), int IComparab...
Equals        Method     bool Equals(System.Object obj), bool Equals(Microsoft.Exchange.Data.ByteQuantifiedSize other)                                  
GetHashCode   Method     int GetHashCode()                                                                                                              
GetType       Method     type GetType()                                                                                                                 
RoundUpToUnit Method     uint64 RoundUpToUnit(Microsoft.Exchange.Data.ByteQuantifiedSize+Quantifier quantifier)                                         
ToBytes       Method     uint64 ToBytes()                                                                                                               
ToGB          Method     uint64 ToGB()                                                                                                                  
ToKB          Method     uint64 ToKB()                                                                                                                  
ToMB          Method     uint64 ToMB()                                                                                                                  
ToString      Method     string ToString(), string ToString(string format), string ToString(string format, System.IFormatProvider formatProvider), st...
ToTB          Method     uint64 ToTB()  
Was das ganze zu dem hier zusammen schrumpft:
if ((Get-PublicFolderStatistics "\Sammelstelle").TotalItemSize.Value.toMB() -ge 1000){  
    start cmd -ArgumentList '/c "D:\Ordner\mein-skript.bat"' -Wait -NoNewWindow  
}
Member: Sinzal
Sinzal Apr 12, 2019 at 13:49:57 (UTC)
Goto Top
Hallo timeout,

danke für deine Erklärungen und das zusammengeschrumpfte Skript. Ich habe es bei meiner Anwendung versucht, umzusetzen. Leider bekomme ich dabei stets den Fehler:
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
(...)
+ CategoryInfo          : InvalidOperation: (:) , RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Wenn ich jedoch
(Get-PublicFolderStatistics "\Sammelstelle")  
oder auch
(Get-PublicFolderStatistics "\Sammelstelle" | select TotalItemSize)  
aufrufe, bekomme ich die gewünschten Angaben aus der datenbank, nur eben als hübsch formatierten und nicht recht wandelbaren String.
Weißt du, was ich hier falsch mache?

Viele Grüße,
Sinzal
Mitglied: 139374
139374 Apr 12, 2019 updated at 14:02:13 (UTC)
Goto Top
Jepp, du verwendest eine Umgebung die die Exchange Objekte serialisiert, in der gibt es die Methoden nicht. Verwende die original EMS.