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-ID: 436735

Url: https://administrator.de/forum/suche-code-zum-vergleich-von-groesse-eines-oeffentlichen-ordners-in-exchange-2016-436735.html

Ausgedruckt am: 29.12.2024 um 02:12 Uhr

139374
139374 04.04.2019 aktualisiert um 20:36:47 Uhr
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  
}
Sinzal
Sinzal 12.04.2019 um 15:49:57 Uhr
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
139374
139374 12.04.2019 aktualisiert um 16:02:13 Uhr
Goto Top
Jepp, du verwendest eine Umgebung die die Exchange Objekte serialisiert, in der gibt es die Methoden nicht. Verwende die original EMS.