steini01
Goto Top

Per VBA Größe der .pst-Datei ermitteln - wie gehts schneller?

Hallo alle zusammen,

In unserer Firma gibt es User, die es immer wieder schaffen, Ihre .pst Dateien über die 2GB-Grenze hinaus aufzublähen.
Das bedeutet für mich jedesmal eine doch recht langwierige und lästige Reparatur mit den Tools "PST2GB" und "SCANPST" (von dem jeweiligen Datenverlust mal ganz abzusehen).
Also hab ich mir überlegt, ich schreibe ein kleines Makro, welches beim Start von Outlook dem Benutzer beim überschreiten der Größe von 1,5GB seiner .pst Datei eine entsprechende Meldung ausgibt.
Soweit - so Gut, leider konnte ich im Outlook-VBA keine Methode finden, welche mir die Gesamtgröße der Persönlichen Ordner-Datei ausgibt. D.h. ich ermittle jetzt über eine Rekursion die Größen aller einzelnen Unterordner und addiere diese dann zusammen. Hier mal mein Code:

Dim lTotalSize As Long

Private Sub Application_Startup()    
    ListAllFolders
End Sub

Function FolderSize(objFolder As MAPIFolder) As Long  
    Dim i As Long  
    Dim lSize As Long      

  With objFolder.Items    
    For i = 1 To .Count      
        lSize = lSize + .Item(i).Size    
    Next i    

   ' Rückgabe in Bytes      
    FolderSize = lSize  
  End With
End Function


Sub ListAllFolders()    
  Dim olNS As NameSpace    
  Dim iTotalSize As Integer    
  lTotalSize = 0            
  Set olNS = Application.GetNamespace("MAPI")         
  ListFolder olNS.Folders, 0        
  
  'Ausgabe der gesamten Ordnergröße in MB      
  iTotalSize = Int(lTotalSize / 1024 / 1024)        

  'Wenn Datei > ~1,5GB dann Warnmeldung ausgeben      
  If iTotalSize > 1500 Then        
     MsgBox "Die Gesamtgröße der Persönlichen Ordner-Datei" & _   
      " beträgt: " & vbCrLf & CStr(iTotalSize) & " MB"      
  End If
End Sub


Sub ListFolder(parentfolder As Folders, i As Integer)
  Dim olFold As MAPIFolder
  Dim lSingleSize As Long

  For Each olFold In parentfolder    

    'Ordnergröße ermitteln      
    lSingleSize = lSingleSize + FolderSize(olFold)
    ListFolder olFold.Folders, i + 1
    DoEventsNext  

    'Ordnergröße zur Gesamtgröße addieren  
    lTotalSize = lTotalSize + lSingleSize
End Sub

Das Ganze funktioniert soweit auch ganz gut, aber bei entsprechend vielen Unterordnern bzw. Dateigröße kann die Abarbeitung schon mal etwas dauern.
Damit wären wir auch bei meiner Frage: Kennt vielleicht jemand eine andere (schnellere) Möglichkeit, die Größe der Persönlichen Ordner-Datei per VBA zu ermitteln?

Schon mal vielen Dank im voraus.

Gruß steini.

Content-Key: 22715

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

Printed on: April 18, 2024 at 22:04 o'clock

Member: verkehrsberuhigt
verkehrsberuhigt Jan 03, 2006, updated at Mar 14, 2023 at 09:34:05 (UTC)
Goto Top
Hi,

schau mal hier vorbei: Größe der pst-Datei per Batch ermitteln und auswerten=176#comment-1363909

Gruß
Member: wiri
wiri Jan 03, 2006 at 15:05:17 (UTC)
Goto Top
hi
liegen die Postfächer auf einem Exchangeserver?
wenn ja mach es dir doch einfacher:
-lege eine Speicherbegrenzung auf die Postfächer
-baue dir ein Script welches dir direkt vom Exchangedbs die größen liefert
dies könnte ich dir zu mailen. face-wink)

cu
willi
Member: Biber
Biber Jan 03, 2006 at 16:09:30 (UTC)
Goto Top
Moin steini,

schließe mich inhaltlich verkehrsberuhigt an: ich würde als Strategie wählen, irgendjemand zu fragen, der die Gesamtgröße der *.pst-Datei schon griffbereit hat, so wie in dem angegebenen Link der DIR-Befehl.

Dieses Zusammenstoppeln der Einzel-Ordnergrößen kann nicht der schnellste Weg sein.

Als reine VBA-Outlookvariante würde ich folgende Skizze nehmen:
- Ermitteln der "Persönlichen-Ordner"-Dateinamen/Speicherorte über Outlook
- dann über FileSystemObject-Funktionen in diesen Ordner auf dieses File-Object
- .FileSize abgreifen
- Feddich

Hat gegenüber der DIR-über-die-ganze-Platte-Mimik drei Vorteile:
a) Performanzvorteile
b) Du hast explizit nur die PST-Datei des angemeldeten Users bzw. Profils
c) Du hast kein Theater mit "langen" Byte-Angaben - der Command-Interpreter kann eben nur mit Zahlen < 10 GigaByte rechnen.

Details gerne bei Bedarf.
HTH Biber

@wiri:
Deine Variante fände ich auch von Allgemein-Interesse.
Wäre das Skript zu lang, um es hier zu posten?
Member: wiri
wiri Jan 03, 2006 at 16:31:12 (UTC)
Goto Top
hi biber
dat Zeug könnte ich hier posten, kann ich aber erst diese Tage.
Member: Biber
Biber Jan 03, 2006 at 20:33:20 (UTC)
Goto Top
@wiri
Danke, wiri... ist ja nix Eiliges...
Vielleicht können wir dann mal so ein "Größe der *.pst-Datei ermitteln"-Tutorial zusammenschreddern mit allen denkbaren Szenarios (lokal, Benutzerbezogen, auf dem Exchange-Server).
Diese uneinsichtigen User hören ja doch nicht auf, mehr zu mailen als M$ verkraftet... bleibt ja doch an uns hängen.

Gruß Biber
Member: steini01
steini01 Jan 04, 2006 at 06:44:49 (UTC)
Goto Top
Hallo zusammen,

vielen Dank für die Antworten!
Also die Dateien liegen im Netzwerk auf dem Fileserver (kein Exchange Server).
Ich werde mal die Variante über das FileSystemObject ausprobieren, komme warscheinlich aber erst nächste Woch dazu face-sad
Ich werde dann nochmals Rückmeldung geben, schaue aber zwischenzeitlich immer mal wieder hier rein bzgl. des Scripts von Wiri.
Also nochmals vielen Dank an alle die sich Gedanken gemacht haben.

Gruß steini.
Member: steini01
steini01 Jan 04, 2006 at 10:51:06 (UTC)
Goto Top
Hallo nochmal,

warum das Rad neu erfinden, wenns doch das meiste schon fertig gibt?
Ich habe unter folgendem Link einen entsprechenden Codeschnipsel gefunden und auf meine Bedürfnisse angepasst:

http://www.outlookcode.com/codedetail.aspx?id=680

Funktioniert fantastisch, und sogar mit UNC-Notation für nicht verbundene Netzlaufwerke.
Evtl. solltet Ihr das in Euer Tutorial mit aufnehmen, ich bin ja schließlich nicht der erste mit so einem Problem.
Nochmals vielen Dank.

Man liest sich,
Gruß steini.
Member: Biber
Biber Jan 04, 2006 at 16:18:26 (UTC)
Goto Top
Danke, steini,

finde ich die richtige Einstellung, nicht jedes Rad neu erfinden zu wollen... face-wink
Deshalb habe ich mich auch gestern auf die oben genannten Stichworte beschränkt.

Mit dem Tutorial - ich glaube, das gehen wir erst an, wenn sich diese Punkte-Jieperei ein bisschen gelegt hat.. oder wir melden uns unter einem neuen Account "admin-teamwork" neu an.
Sonst fangen wiri, Du und ich auch noch an, uns um die Viertelpunkte zu balgen face-big-smile

Grüße Biber