Jump to content

Find Outlook Archive Location All Users


Recommended Posts

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?

Link to comment
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.

Link to comment
Share on other sites

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
Link to comment
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")

 

Link to comment
Share on other sites

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
 Share

×
×
  • Create New...