Followers 0

# Find Outlook Archive Location All Users

## 4 posts in this topic

Doing some PC replacements for multi-user computers, one of the problems I run into is Outlook Archives.  Each user may have some hidden away in the default AppData location, others are a bit smarter and put them on a network location.

I think its time to come up with a script I can run as an admin on the computer that will compile the PST locations of all users to a file for me so I can make sure to not miss those in a PC swap.

I would most likely enumerate the registry, but it appears there is a COM object that I can perhaps use as well (though not sure if that would be current user only, or can be implemented for an "all user" situation) before I go on the hunt any ideas or already created scripts for this function?

#### Share this post

##### Share on other sites

Hi,

This sounds pretty simple unless there is something I am missing. You can use DriveGetDrive to list the drives connected the the user's computer. Then use _FileListToArrayRec to list only .PST files. You can save the person's login name (and computer name to help identify in case they log into multiple computers) and the list of returned items. Save it to a network location. I have done such a thing when I needed to get the serial numbers, model numbers, etc off everyone's computers. By the way, I have noticed that FileListToArrayRec is much faster than Windows' built in search function.

Hopefully, this info can get you started. If you run into any trouble, let us know.

The truth has been suppressed since the dawn of time.

#### Share this post

##### Share on other sites

#3 ·  Posted (edited)

Yeah I could search like that  (probably would have used powershell with get-childitem) but I am afraid of the speed of searching an entire drive when the data I need should be already on the computer.  Also if on a network storage location searching the C: would not help.

I read (and though I had previously verified) that HKCU:\software\Microsoft\Office\15.0\Outlook\Catalog had a history of archives attached.

When I just looked at my computer that was not the case but a similar path did.

HKCU\Software\Microsoft\Office\14.0\Outlook\Search\Catalog

Obviously the 14/15 etc would change based on office version.  So I need to go look at some more computers to verify the information is there, if it is this is the script I have so far.

#Include <SecurityEx.au3>
#Include <Reg.au3>
#Include <Array.au3>
#Include <FileConstants.au3>
#Include <File.au3>
#RequireAdmin

$aUsers = _FileListToArray("C:\Users", "*",$FLTA_FOLDERS)
For $i = 1 to$aUsers[0]

If NOT StringInStr($aUsers[$i], "Administrator") AND NOT StringInStr($aUsers[$i], "Default") AND NOT StringInStr($aUsers[$i], "All Users") AND NOT StringInStr($aUsers[$i], "Public") Then
_RegLoadHive("C:\Users\" & $aUsers[$i] & "\ntuser.dat", "HKU\" & $aUsers[$i])
For $i2 = 1 to 200$sSubKey = RegEnumVal("HKU\" & $aUsers[$i] & "\Software\Microsoft\Office\14.0\Outlook\Search\Catalog", $i2) If @Error Then ExitLoop _FileWriteLog(@DesktopDir & "\Outlook Archives.txt",$aUsers[$i] & " - " &$sSubKey)
Next
_RegUnloadHive("HKU\" & $aUsers[$i])
EndIf

Next

Edited by ViciousXUSMC

#### Share this post

##### Share on other sites

Well after looking at a few computers looks like that registry path works well, so I modified to let me pick the Outlook version in use and also go ahead and copy those .pst files to a single location so that I do not need to go manually hunt them down.  Just tried it and seems to be working perfectly.

#Include <SecurityEx.au3>
#Include <Reg.au3>
#Include <Array.au3>
#Include <FileConstants.au3>
#Include <File.au3>
#RequireAdmin

$vOutlookVer = InputBox("Enter Outlook Version", "Outlook 2013 = 15" & @CRLF & "Outlook 2010 = 14" & @CRLF & "Outlook 2007 = 12")$aUsers = _FileListToArray("C:\Users", "*", $FLTA_FOLDERS) For$i = 1 to $aUsers[0] If NOT StringInStr($aUsers[$i], "Administrator") AND NOT StringInStr($aUsers[$i], "Default") AND NOT StringInStr($aUsers[$i], "All Users") AND NOT StringInStr($aUsers[$i], "Public") Then _RegLoadHive("C:\Users\" &$aUsers[$i] & "\ntuser.dat", "HKU\" &$aUsers[$i]) For$i2 = 1 to 200
$sSubKey = RegEnumVal("HKU\" &$aUsers[$i] & "\Software\Microsoft\Office\" &$vOutlookVer & ".0\Outlook\Search\Catalog", $i2) If @Error Then ExitLoop If StringRegExp($sSubKey, ".*\.pst$") Then DirCreate(@DesktopDir & "\Outlook Archives\" &$aUsers[$i]) _FileWriteLog(@DesktopDir & "\Outlook Archives\Outlook Archives.txt",$aUsers[$i] & " - " &$sSubKey)
FileCopy($sSubKey, @DesktopDir & "\Outlook Archives\" &$aUsers[$i] & "\" &$aUsers[$i] & "-" &$i2 & ".pst")
EndIf

Next
_RegUnloadHive("HKU\" & $aUsers[$i])
EndIf

Next

MsgBox(0, "BoCC Automation", "Copy of Outlook Archives Completed")

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

## Sign in

Already have an account? Sign in here.

Sign In Now
Followers 0

• ### Similar Content

• By water
Extensive library to control and manipulate Microsoft Outlook.
Theads: Development - General Help & Support - Example Scripts - Wiki
BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort

KNOWN BUGS (last changed: 2018-01-26)
Function _OL_RuleConditionSet does not properly handle parameter rule condition type ($iRuleConditionType) when value$olConditionSentTo is passed. it is being processed the same way as $olConditionFrom. Thanks to user Moonscarlet for reporting this bug. Fixed with version 1.3.3.1 of the UDF. • By cag8f Hi all. Does AutoIt have any functions/tools (either built-in or user defined) that can help me automate the process of exporting an OST mailbox to a PST file in Microsoft Outlook (2013)? I know how to carry out the process manually. At the Microsoft Forums, I have asked if it is possible to do the same via a script, but some have said it is not possible. It may be possible if I was using Microsoft Exchange, but I am not. I've seen some posts about an Outlook UDF on this site (here and here), but I don't see any mention of exporting a mailbox. In my post at the Microsoft Forums, many paid third party applications were suggested. But for now I would like to pursue the custom scripting route as far as I can. The ultimate goal of this exercise is to automatically create a weekly backup of my Outlook mailbox for offline storage. Thanks in advance. • By zetaimmersion Hi all. I am trying to do 2 things but i cannot seem to get any traction on how to read/implement this idea. Premise: PowerPoint file in C\temp\presentation.pptx that contains on the first slide 2 entries as "<one>" and "<two>" which need to be replaced with "user1" and "user2", then a silent Outlook send mail containing the file with a predefined body and subject. I narrowed it down to COM objects as the Office does not like intrusive open AutoIt functions. I installed OLE/COM Object Viewer to understand how to create the commands but i am still stuck. So far i am trying to user water's code but i suck COM object i was originally trying to modify Dim$oPPT, $oPres$oPPT = ObjCreate("PowerPoint.Application") $oPPT.Visible = True$oPres = $oPPT.Presentations.Read Water's code below (0.1% modified) #include <File.au3> #include "PowerPoint.au3" #include <misc.au3> Global$sFile = "C:\temp\presentation.pptx" Global $sString2Search = "<username>",$sString2Replace = "Password", $iReplaceOnce = 1,$sFullLogFile = "C:\temp\pptxlog.txt" _ProcessPpt($sFile) Func _ProcessPpt($sFile) $oApp = _PPT_PowerPointApp() Local$bChange = False Local $oInterface =$oApp.Presentations Local $oPresentation =$oInterface.Open($sFile, False, False, False) If @error Then _FileWriteLog($sFullLogFile, "E Error " & @error & " opening File " & $sFile) Return SetError(1, 0, 0) EndIf ;it does not even open my file and from here not sure how to read the text and replace it EndFunc ;==>_ProcessPpt • By Smigacznr1 I'm writing Outlook pst cleaner and now I'm stuck. Compiled script is crashing with OS crash message. When I tryied to run script from editor it's exiting itself (mabye it's some type of crash?) always when it's processing on 4-rd pst file. Here is my code: #include <OutlookEX.au3> #include <Date.au3> #include <File.au3> #include <Array.au3> _cleanOutlook("Administrator") _cleanOutlook("Admin") Exit Func _cleanOutlook($user) $foldery = "Wiadomości-śmieci#?SPAM#?Junk E-mail#?Elementy usunięte#?Deleted Items"$tab_folderow = StringSplit($foldery, "#?", 1)$tab_pst = _FileListToArrayRec("c:\users\" & $user, "*.pst", 1+4+8, 1, 0, 2) ;~ _ArrayDisplay($tab_pst) For $d = 1 To UBound($tab_pst) -1 Step +1 $outlook = _OL_Open(True) _OL_Close($outlook, True) $outlook = _OL_Open() Local$aStores = _OL_StoreGet($outlook) ;~ _ArrayDisplay($aStores) For $i = 1 to$aStores[0][0] If $aStores[$i][4] = True Then ;~ ConsoleWrite(@CRLF & "zamykam pst 2") _OL_PSTClose($outlook,$aStores[$i][0]) EndIf Next ;~ _OL_PSTAccess($outlook, "C:\Users\Administrator\Desktop\cos.pst") _OL_PSTAccess($outlook,$tab_pst[$d]) ConsoleWrite(@CRLF &$tab_pst[$d]) ;~$tab_struktury = _OL_FolderTree($outlook, "*", 10) ;~ If @error Then ;~ ContinueLoop ;~ EndIf ;~ _ArrayDisplay($tab_struktury) $tab_ktory_pst = _OL_PSTGet($outlook) ;~ _ArrayDisplay($tab_ktory_pst) For$a = 0 To UBound($tab_ktory_pst) -1 Step +1 If$tab_ktory_pst[$a][2] =$tab_pst[$d] Then ;~ MsgBox(0, "",$tab_ktory_pst[$a][0])$nazwa_bazy_pst = $tab_ktory_pst[$a][0] EndIf Next ;~ MsgBox(0, "", UBound($tab_folderow)) ;~ _ArrayDisplay($tab_folderow, $tab_pst[$d]) ConsoleWrite(@CRLF & "przed while") $a = 0 While$a < 2 ConsoleWrite(@CRLF & "while 1") For $b = 1 To UBound($tab_folderow) -1 Step +1 ConsoleWrite(@CRLF & "for 1") $tab_struktury = _OL_FolderTree($outlook, $nazwa_bazy_pst) ;~ _ArrayDisplay($tab_struktury, $nazwa_bazy_pst) ;~$folder = _OL_FolderAccess($outlook, StringTrimLeft($tab_struktury[0], 2) & "\" & $tab_folderow[$b]) $folder = _OL_FolderAccess($outlook, $nazwa_bazy_pst & "\" &$tab_folderow[$b]) ;~ ConsoleWrite(@CRLF & "eeee") If @error Then ;~ MsgBox(0, "", "\\" &$nazwa_bazy_pst & "\" & $tab_folderow[$b] & @CRLF & @error) ConsoleWrite(@CRLF & "przechodze do kolejnego " & $b+1) ContinueLoop EndIf ;~ _ArrayDisplay($folder, $nazwa_bazy_pst) ConsoleWrite(@CRLF &$tab_folderow[$b]) If$tab_folderow[$b] = "Deleted Items" Or$tab_folderow[$b] = "Elementy usunięte" Then ConsoleWrite(@CRLF & "usuwam kosze") _OL_FolderDelete($outlook, $folder[1], 1) _OL_FolderDelete($outlook, $folder[1], 2) _OL_FolderDelete($outlook, $folder[1], 3) _OL_FolderDelete($outlook, $folder[1], 4) ;~ _OL_FolderDelete($outlook, $folder[1], 5) EndIf If$a = 0 Then $tab_maile = ""$data_dzis = @YEAR & "/" & @MON & "/" & @MDAY & " 00:00" ;~ $data_dzis = "2017/01/31 00:00"$data_szukana = _DateAdd("D", "-3", $data_dzis)$tab_maile = _OL_ItemFind($outlook,$folder[1], $olMail, "[Received]<'" & StringReplace($data_szukana, "/", "-") & "'", "", "", "EntryID", "", 1) If @error Then ContinueLoop EndIf ;~ If UBound($tab_maile) > 1 Then ;~ _ArrayDisplay($tab_maile) ;~ EndIf If UBound($tab_maile) > 1 Then For$c = 1 To UBound($tab_maile) -1 Step +1 ;~ ConsoleWrite(@CRLF & "usuwam stare maile") _OL_ItemDelete($outlook, $tab_maile[$c][0], "", False) Next EndIf EndIf Next $a =$a + 1 WEnd ;~ ConsoleWrite(@CRLF & "pokazuje") ;~ $folder[1].Display$olFolderInbox.Display ;~ _OL_PSTClose($outlook,$olFolderInbox) ;~ If @error Then ;~ MsgBox(0, "", @error) ;~ EndIf Local $aStores = _OL_StoreGet($outlook) ;~ _ArrayDisplay($aStores) For$i = 1 to $aStores[0][0] If$aStores[$i][4] = True Then ;~ ConsoleWrite(@CRLF & "zamykam pst 1") _OL_PSTClose($outlook,$aStores[$i][0]) EndIf Next ;_OL_PSTClose($outlook,$folder[1]) _OL_Close(\$outlook, True) If @error Then MsgBox(0, "", @error) EndIf ConsoleWrite(@CRLF & "zamykam") ProcessWaitClose("outlook.exe", 30) ProcessClose("outlook.exe") Next EndFunc
Outlook and OS is updated. I'm usinn OutlooEX in ver. 1.3.1.0
Any ideas?

• By Gowrisankar
Dear members of the forum,
I'm new to AutoIt and I'm having a good time exploring and enjoying the features of AutoIt.
For one of my tasks, I've to open few particular mails from outlook based on subject of the mails and then print the mails. Can someone please guide me how to do it?
My question could be very silly for experts. But I'm just a beginner. Kindly advice.
Thanks and regards,
Gowrisankar R.