Poser une questionPoser une question
 

Traitéevbs to copy nk2

  • samedi 4 juillet 2009 11:43tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    this is driving me crazy. 

    Fist a batch file would do this so simple in 4 lines but my company wants only vbs. 

    Here is what I need. 

    When the user logs on a vbs will run that copies there nk2 file to s sever share.

    If they don't have one it skips it.

    We use Vista and XP so %appdata%\Microsoft\outlook\*.nk2. 

    VBS does not understand %appdata% or at least I don't know how to make it understand. 

    does anyone have this or something like it? 

    Thanks

Réponses

  • dimanche 5 juillet 2009 07:24perhof Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     Traitée
    Yes, I'm sorry about that Typo. Even did it twice... sigh. You only need one shell object.
    You can skip the strUsername part completely if you want to since we're already expanding environment strings.
    Just use \\SUN-RON-XP\nk2\%USERNAME%\ for strTarget (why did you remove %username% from my example?) and then do this to create the folder when necessary:

    If not objFSO.FolderExists(strTarget) Then objFSO.CreateFolder(strTarget)

    You said that it doesn't work on both Vista and XP. Is that still so? Where does it NOT work?
    You should be able to put %APPDATA%\Microsoft\outlook in the address bar in both operating systems and end up in the right folders.
    %APPDATA%\Microsoft\outlook\*.nk2 shouldn't work though. That's not a valid path in Explorer.
    • Marqué comme réponsetnetplus dimanche 5 juillet 2009 13:19
    •  

Toutes les réponses

  • samedi 4 juillet 2009 12:22perhof Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
    To use an environment variable in VBScript you will need to expand it first.
    This is done using the ExpandEnvirnomentStrings method of the Wscript.Shell object.
    Like this:

    Set objWSHShell = CreateObject("Wscript.Shell")
    strPath =objWSHShell.ExpandEnvironmentStrings("%appdata%\Microsoft\outlook\*.nk2")
  • samedi 4 juillet 2009 15:34tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
    Thanks so much.  I have made some progress.

    As a update I found this script and I have altered it slightly for the vista variables as well as xp.  I have also added the echo commands as a temp thing so I can see if it is finding the file.  It is not finding it on either test pc (vista or xp).

    The issue i think it is looking for a nk2 file names username.nk2 and ours most likely will not be named that.  They may be outlook.nk2 or default user.nk2 or anything.  a user may have a old nk2 or nk2 from another account.  So can this be modified to look for any nk2 in the paths stated  and copy it to the share.
    I know nothing of VBS so i THINK this is correct.



    rem start


    Option Explicit

    Dim objFSO, objShell
    Dim strUser
    Set objShell = CreateObject("Wscript.Shell")
    strUser = objShell.ExpandEnvironmentStrings("%USERNAME%")
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    If objFSO.FileExists("C:\Documents and Settings\" & strUser & "\Application Data\Microsoft\Outlook\" & strUser & ".NK2") Then
         objFSO.CopyFile "C:\Documents and Settings\" & strUser & "\Application Data\Microsoft\Outlook\" & strUser & ".NK2" , "\\server\" & strUser & "\" & strUser & ".NK2" , True
         WScript.Echo("XP File exists!")
    Else
    WScript.Echo("xp File does not exist!")
    End If
     
     If objFSO.FileExists("C:\Users\" & strUser & "\AppData\Roaming\Microsoft\Outlook\" & strUser & ".NK2") Then
         objFSO.CopyFile "C:\Users\" & strUser & "\AppData\Roaming\Microsoft\Outlook\" & strUser & ".NK2" , "\\server\" & strUser & "\" & strUser & ".NK2" , True
         WScript.Echo("Vista File exists!")
    Else
    WScript.Echo("Vista File does not exist!")
    End If

    set objFSO = nothing
    set strUser = nothing
    WScript.Quit
  • samedi 4 juillet 2009 17:37perhof Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     A du code
    Your first approach was better. Use the %APPDATA% variable. It will work with both XP and Vista and simplifies things.
    You also had a *.nk2 in there which is the way to go.
    I think this should do it:
    Set objWshShell = CreateObject("Wscript.Shell")
    
    strSource = objWshShell.ExpandEnvironmentStrings("%APPDATA%\Microsoft\outlook\*.nk2")
    strTarget = objShell.ExpandEnvironmentStrings(<a>\\server\%USERNAME%\</a>)
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    On Error Resume Next
    objFSO.CopyFile strSource, strTarget, True
    
    If Err.Number = 0 Then
    	Wscript.Echo "File copied successfully"
    Else
    	Wscript.Echo "Error " & Err.Number & vbTab & Err.Description
    End If
    

    You can skip everything after objFSO.CopyFile if you don't need errorhandling but keep the On Error Resume Next statement or the script will fail if there are no nk2 files.
  • samedi 4 juillet 2009 20:22tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    First thank you so much I truly don't know how to thank you.

    However when I run it I receive the below error.

     

     

    syntax error line 4 char 47  the code is 800A03ea which is somewhere in this area

    strTarget = objShell.ExpandEnvironmentStrings(<a>\\server\%USERNAME%\</a>)

    • Marqué comme réponsetnetplus samedi 4 juillet 2009 22:07
    • Non marqué comme réponsetnetplus samedi 4 juillet 2009 22:07
    •  
  • samedi 4 juillet 2009 21:36tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    I have put my server path in the place where it says \\server but I can determine what the <a> at the start of the path and the </a> at the end is for.

    I am still getting the same error.  I have tried removing the a's and few other variations but still the same error and I am unable to determine the reason for the error.

     

  • samedi 4 juillet 2009 21:52perhof Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     
    I have no idea what happened to the code when I posted it but it was wrong. It should be quotes - not an <a> tag.

    strTarget = objShell.ExpandEnvironmentStrings("\\server\%USERNAME%\")
  • samedi 4 juillet 2009 22:13tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    it is still giving a error on the same line but different place.

     

     

    Line 4 Char: 1   error object required: 'objshell'
    strTarget = objShell.ExpandEnvironmentStrings("
    \\SUN-RON-XP\nk2\%USERNAME%\")

    The \\sun-ron-xp is a test pc on my network

  • samedi 4 juillet 2009 23:05tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    I changed one thing on the third line see below.

     

    Set objWshShell = CreateObject("Wscript.Shell")

     

    strSource = objWshShell.ExpandEnvironmentStrings("%APPDATA%\Microsoft\outlook\*.nk2")

    strTarget = objWshShell.ExpandEnvironmentStrings("\\SUN-RON-XP\nk2\%USERNAME%\")

    It did not give a VB error  but it gave               Error 76 path not found on both XP and vista

  • samedi 4 juillet 2009 23:10tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    Also when i put %APPDATA%\Microsoft\outlook\*.nk2 in the run bar it does not find anything. If i put %APPDATA%\Microsoft\outlook\ it does get me to the directory.  I wonder if that wildcard is throwing the VBS for a loop.  Still you are light years ahead of me on this and i do thank you for any time you will give me.

  • samedi 4 juillet 2009 23:34tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

     

    I am so excited this is as close as I have came thanks to you.

    Below does work if I change it to (see bottom script)

    The issue is it needs to create a folder for that user.  I had to change it to where the path was just \\server\nk2 from \\server\nk2\%username% as it was not finding that directory because it did not exist

    So if it is john smith logs on and his log on is jsmith it should create the folder jsmith in \\server\nk2\.  Also will this overwrite previous nk2 files, as it will run at each log on and needs to overwrite each time.

     

    Thanks again.

     

    Set objWshShell = CreateObject("Wscript.Shell")

    Set objShell = CreateObject("Wscript.Shell")

     

     

    strSource = objWshShell.ExpandEnvironmentStrings("%APPDATA%\Microsoft\outlook\*.nk2")

    strTarget = objShell.ExpandEnvironmentStrings("\\SUN-RON-XP\nk2\")

     

     

    Set objFSO = CreateObject("Scripting.FileSystemObject")

     

    On Error Resume Next

    objFSO.CopyFile strSource, strTarget, True

     

    If Err.Number = 0 Then

                    Wscript.Echo "File copied successfully"

    Else

                    Wscript.Echo "Error " & Err.Number & vbTab & Err.Description

    End If

     

  • dimanche 5 juillet 2009 06:43NickHunyady Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     A du code
    Couple of pointers,

    Like perhof's script shows you only need one call to Wscript.Shell

    Set objWshShell = CreateObject("Wscript.Shell")
    
    
    strSource = objWshShell.ExpandEnvironmentStrings("%APPDATA%\Microsoft\outlook\*.nk2")
    
    strTarget = objWshShell.ExpandEnvironmentStrings("\\SUN-RON-XP\nk2\")
    

    To get the current user you can add this:

    Set WshNetwork = WScript.CreateObject("WScript.Network")
    strUserName = WshNetwork.UserName

    Then to create a folder it would be:

    objFSO.CreateFolder strTarget & strUserName



     

  • dimanche 5 juillet 2009 07:24perhof Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     Traitée
    Yes, I'm sorry about that Typo. Even did it twice... sigh. You only need one shell object.
    You can skip the strUsername part completely if you want to since we're already expanding environment strings.
    Just use \\SUN-RON-XP\nk2\%USERNAME%\ for strTarget (why did you remove %username% from my example?) and then do this to create the folder when necessary:

    If not objFSO.FolderExists(strTarget) Then objFSO.CreateFolder(strTarget)

    You said that it doesn't work on both Vista and XP. Is that still so? Where does it NOT work?
    You should be able to put %APPDATA%\Microsoft\outlook in the address bar in both operating systems and end up in the right folders.
    %APPDATA%\Microsoft\outlook\*.nk2 shouldn't work though. That's not a valid path in Explorer.
    • Marqué comme réponsetnetplus dimanche 5 juillet 2009 13:19
    •  
  • dimanche 5 juillet 2009 13:24tnetplus Médailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateurMédailles de l'utilisateur
     

    Success.

    Thanks so much for all your time.

    It works on vista, windows 7 and XP perfectly.

    I have pasted the final result below.  Although still a lover of batch files as it did this simply in 3 or 4 lines at least VBS is a LITTLE less unknown to me today.

    Thanks again.

     

    REM start of finished script

    Set objWshShell = CreateObject("Wscript.Shell")

    strSource = objWshShell.ExpandEnvironmentStrings("%APPDATA%\Microsoft\outlook\*.nk2")

    strTarget = objWshShell.ExpandEnvironmentStrings("\\server\%USERNAME%\")

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If not objFSO.FolderExists(strTarget) Then objFSO.CreateFolder(strTarget)

    On Error Resume Next

    objFSO.CopyFile strSource, strTarget, True

    Rem everything below this line can be removed as this is for error checking

    If Err.Number = 0 Then

                    Wscript.Echo "File copied successfully"

    Else

                    Wscript.Echo "Error " & Err.Number & vbTab & Err.Description

    End If