Logon Script: Move Local PST Files To Network Share

Download Script: move-pst-to-network.zip

So, my buddy (and former co-worker) called me yesterday for some help with a script he put together.  His script checked the local profile in Outlook for any PST files that were stored locally.  If it found any, it would them move them to the users home space.  We tried and tried to get the script to work properly but it never seemed to work 100%.  Being that he is a good friend and this would be useful at work, I decided to take the work he had put in and get the thing working.

Here is what the script does:

  1. Checks to see if the computer is a laptop.  If it is, the user probably uses Outlook offline and/or over VPN so moving the PST to a network share will be detrimental to the user’s experience.  If you don’t care, just comment out lines 17-21.
  2. Checks to see if Outlook is installed and can be launched properly.  If it can not, no sense in continuing the script.  It will exit.
  3. Checks to see that the target (network) directory exists and is writable.  If it does not exist or is not writable, the script will exit.
  4. Enumerates all the local stores and returns all the PST files.
  5. Check to see if the PST files are stored on local drives.  It will exclude drives that are mapped network drives and/or removable media.
  6. Check if a file already exists in the target directory with the same name.  If one does, it will not copy the file over. (I may update the script to move and rename the file to ensure all local PSTs are moved.
  7. Removes all Personal Folders from Outlook that matched criteria.
  8. Moves actual PST files to network share (Outlook will close to release the file lock on the PST file).
  9. Adds all the Personal Folders back to Outlook.

I have tested this on Windows XP w/ Office 2007 and Office 2003.  I am interested in hearing if this works or not in your environment.  I hope you find this useful.

22 comments

  1. MarkC says:

    Hi Andrew,

    I’ve been looking for something like this to do exactly the same thing on our network.

    I’ve made a few changes, so that it will work exactly how we want and also create a log file of what’s happened. The script works great, apart from one important thing that I’m stuck on..

    It will move only the first PST it comes across in Outlook each time it is run. It doesn’t seem to either want to read the others in to the array or read others from the array.

    My VBS skills are really weak (although getting better quickly!). I wondered if you could shed any light on this?

    Many thanks, and well done on a great script!

    Mark.

    • Andrew says:

      Hi Mark,
      We too experienced similar issues. However, we rewrote our original script and ended up with the one above which hasn’t given us the same grief as the original did. There are three main actions that occur in the script above:
      1. Delete local stores
      2. Move files
      3. Add local stores back
      Play around with pauses. It seems to make a world of difference. We found the issue seemed to be related to latency either on the system or on the network. Putting in more pauses fixed the issue (see line 98). Try adding a pause on line 105 and/or line 85.

  2. Microsoft Guy says:

    Hi Andrew,

    Your vbscript is amazing!

    I’m having a slight issue with Outlook 2007. Currently, all of our workstations have the “Personal Folders” as the default mail folder in which all emails flow into. Whenever I run your script up to line 75 ( objOutlook.Session.RemoveStore objFolder), I get the following error message:

    “You cannot close the mailbox that contains your calendar, contacts, and inbox.

    Is there are way to force removal of that “Personal Folders”?

    I really appreciate your help!
    Thank you very much,
    Bao Tran

    • Nebil says:

      Hi Andrew,
      I am having the same issue as the Microsoft Guy.
      the problem happens when you try to move a PST file that is already the default mail folder.
      do you have a tweak to fix this issue? thanks again

  3. sebcou says:

    Hi Andrew,

    Great script ! I made a few changes to make it work like I want to.

    I noticed a bug in your script though. It appears when a user has more than one PST mounted in Outlook. When you remove the folder in the For Each loop, the collection of objNS.Folders is modified (the folder object is removed from the collection) and it causes the loop to stop. It results in the second PST not being moved.

    To solve this problem, I had to put the folder in another array instead of removing it in the For Each loop then loop through this array and remove the folder from Outlook. I can send you my version of the code if you want.

    Many thanks for your script.

  4. Peter says:

    Hello,

    in my case the script in here:
    if (strChassisType >= 8 And strChassisType <=12) Or (strChassisType = 14) Then

    Actually I am looking for a script to place back .pst files from network share to user profile.
    Can you help me with that?
    You script is amazing but I have some problems with it.

    Regards,
    Peter

  5. DeHer says:

    Hi sebcou,

    I’m also interesseted in your version of this great script. I’m experiencing the same trouble as you and Guido do.
    Could you sent me your version?

    Many thanks.

  6. Ryan D says:

    Did Sebcou ever send out his updated script? Having the same problem where it will only move one PST per script run. Also anybody else have a solution for archive files that have the same file name?

  7. DrNO says:

    http://stackoverflow.com/questions/6414189/move-pst-files-to-server-via-vb

    Read answer :

    ‘ Enumerate PST filesand build arrays
    objTextFile.Write(“Enumerating PST files” & vbCrLf)
    For Each objFolder in objNS.Folders
    If GetPSTPath(objFolder.StoreID) “” Then
    count = count + 1
    pstFiles = GetPSTPath(objFolder.StoreID)
    pstName = objFolder.Name
    pstFolder = objFolder
    objTextFile.Write(count & ” ” & pstFiles & vbCrLf)
    ReDim Preserve arrNames(count)
    arrNames(count) = pstName
    ReDim Preserve arrPaths(count)
    arrPaths(count) = pstFiles
    ‘objOutlook.Session.RemoveStore objFolder
    End If
    Next

    For Each pstName in arrNames
    set objFolder = objNS.Folders.Item(pstName)
    objNS.RemoveStore objFolder
    Next
    set objFolder = Nothing

  8. Kevin says:

    Hi Andrew

    Just discovered this script looks perfect for what I am foing. I get an error about the remote path not being writable. I see the section of code referencing this but the users home directory is writabke in that i can move files manually. Is there a change I have to make to or file I have to create on the remote path in order to get this working?

  9. Erik says:

    Great work, ive been looking for a such a script. My vbs skills are basic, but i want a script to search a network path and then add the pst files to outlook. How can this be done?

  10. Deepak says:

    Sir,
    i have edited your script as per our domain and share setting. given all rights to that particular user. but i dont know why i am getting an error that “remote path is not writable” if i comment to this i got one more error ” you cannot close the mailbox….. that code is 80004005 and source is microsoft office outlook

  11. HAZE says:

    sebcou Comment:
    Just wondering if anyone found out how to resolve the loop issue. I am having the issue with it only handling one PST at time. Any help is very much appreciated.

    Thanks

  12. Fredric Douhane says:

    Hi Andrew, unsure if you’d still read this blog, but would it be possible to reverse the script without much issue? My scripting experience is limited, but basically what’s needed to be done is check if .pst files are mapped up on a specified network drive then copy them to a specified folder on the harddrive and map them up, so yeah, same thing but backwards 😀

  13. red says:

    See a previous users comment about how networked .pst files aren’t supported.

    Microsoft says opening .pst files in outlook from a network location can cause corruption and even server hangs. If you set this up and experience any issues don’t expect any help from MS support.

    We are currently trying to move .pst files from a network location back to the local computer to avoid these issues.

  14. Jason Lehr. says:

    Uggh this script is close (http://stackoverflow.com/questions/6414189/move-pst-files-to-server-via-vb ) but what I am noticing is:
    1) Only works for one PST (I don’t care about PST’s not connected for my purposes)
    2) It seems to corrupt the copy of the PST on the destination if run when Outlook is closed. If open, it closes Outlook and moves it no issue.

    The supplement that DrNO added…where would that go in the code can you provide the full script with your piece in it?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">