Hallo zusammen,
ich bräuchte mal euere Hilfe. Für die weitere Verarbeitung der Daten, benötige ich den Pfad wo sich die PST-Dateien befinden, der Name ist unwichtig.
Die Pfade sollen der Reihe nach, zu einer bestehenden ini (ab Zeile 21) hinzugefügt werden.
Mit dem Script lese ich die Pfade aus der Registry heraus. Es werden jedoch nur die zum Zeitpunkt registrierten PST-Dateien aufgelistet.
Outlook_suche
#include <Array.au3>
#include <Date.au3>
#include <File.au3>
Local $s[15], $r[15], $ss[15], $rr[15]
For $i = 1 To 15
$s[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Search\", $i)
;$x[$i][0] = $s[$i]
If @error <> 0 Then ExitLoop
If $s = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$r[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Search\", $i)
;$x[$i][1] = $r[$i]
If @error <> 0 Then ExitLoop
If $r = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$ss[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Outlook\Search\", $i)
;$x[$i][0] = $ss[$i]
If @error <> 0 Then ExitLoop
If $ss = "" Then
ContinueLoop
EndIf
Next
For $i = 1 To 15
$rr[$i] = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Search\", $i)
;$x[$i][1] = $rr[$i]
If @error <> 0 Then ExitLoop
If $rr = "" Then
ContinueLoop
EndIf
Next
_ArrayAdd($s, $r + $ss + $rr)
Local $aArrayUnique = _ArrayUnique($s) ; Use default parameters to create a unique array.
;_ArrayDisplay($aArrayUnique, "$aArray Unique") ; Display the unique array.
$zz = UBound($aArrayUnique) - 1
For $j = $zz To 1 Step -1
If $aArrayUnique[$j] = "" or not FileExists($aArrayUnique[$j]) Then
_ArrayDelete($aArrayUnique, $j)
ElseIf FileExists($aArrayUnique[$j]) Then
$aArrayUnique[$j] = $aArrayUnique[$j]
Else
ContinueLoop
EndIf
Next
$ee = UBound($aArrayUnique) - 1
$aArrayUnique[0] = $ee
$sShortMonthName = _DateToMonth(@MON, $DMW_SHORTNAME)
$yr = @YEAR
$dy = @MDAY
$Snow = _NowTime(5)
$DT = $sShortMonthName & "_" & $dy & "_" & $yr & "," & $Snow
FileWrite(@DesktopDir & "\PstOst.txt", $DT & @CRLF & "File PST/OST file locations." & @CRLF & @CRLF)
For $t = 1 To UBound($aArrayUnique) - 1
FileWrite(@DesktopDir & "\PstOst.txt", $aArrayUnique[$t] & @CRLF)
Next
_ArrayDisplay($aArrayUnique, "Outlook Current PST/OST", "0:" & $ee, 80)
FileWrite(@DesktopDir & "\PstOst.txt", @CRLF & @CRLF)
Exit
Der Text ist wie folgt aufgebaut:
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail@gmail.com.ost
D:\Documents\Outlook-Dateien\iCloud Archive.pst
D:\Ordner\Orner1\Ordner2\Outlook-Dateien\iCloud Archive1.pst
F:\Ordner\iCloud Archive2.pst
G:\Ordner\Ordner1\Ordner2\Ordner3\Outlook-Dateien\iCloud Archive3.pst
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail1@gmail.com.ost
Die ini sieht so aus.
[Quellen]
1=d:\Documents\Desktop
2=d:\Documents
…
…
…
21=
22=
usw.
Mit folgendem Skript kann ich mir das Ergebnis anzeigen lassen, danach weis ich jedoch nicht weiter.
Spoiler anzeigen
#include<File.au3>
#include <Array.au3>
$pString = FileRead(@ScriptDir & "\PstOst.txt")
$pPST = StringRegExp($pString, ".*pst", 3)
;~ MsgBox(64, "Ergebnis", $sString)
_ArrayDisplay($pPST)
Um auch die nicht registrierten PST-Dateien außerhalb Outlooks zu erkennen, verwende ich folgendes Skript.
Spoiler anzeigen
DirCreate(@ScriptDir & '\Outlook')
RunWait(@ComSpec & " /c " & 'dir D:\*.pst /b /s >' & @ScriptDir & '\Outlook\Outlook.txt', "", @SW_HIDE)
$file1txt = FileRead(@ScriptDir & '\Outlook\Outlook.txt', FileGetSize(@ScriptDir & '\Outlook\Outlook.txt'))
$file1txtARRAY = StringSplit($file1txt, @CRLF, 1)
For $i = 1 To $file1txtARRAY[0]
Next
Zusätzlich wäre hier noch die Frage, wie man verhindern kann das der gleiche Pfad mehrfach in die Ini geschrieben wird.
Das Ganze sieht so aus:
D:\Documents\Desktop\Ordner\Kontakte\Kontakte.pst
D:\Documents\Outlook\Kopie von meinOrdner.pst
D:\Documents\Outlook\Outlook1 - Kopie.pst
D:\Documents\Outlook\Outlook1.pst
D:\Documents\Outlook\Outlsend.to.com-00000006.pst
D:\Documents\Outlook\Meine.pst
D:\Documents\Outlook-Dateien\gmail.com.pst
D:\Documents\Outlook-Dateien\iCloud Archive.pst
Für euch wird das alles kein Problem sein, für mich „Newbie“, stellt das alles eine riesen Hürde dar.
Fertiger Code ist herzlich willkommen.
Grüße, Mitac