VanDyke Software

Automation Tip

Index

This tip from one of our software developers shows you how to set up a way to drag and drop SFTP transfers to a folder on a remote machine using VCP (a command-line file transfer utility included with VShell® server and SecureCRT®), VBScript, and a desktop shortcut.

Using VCP and VBScript for Drag and Drop SFTP Transfers to a Folder on a Remote Host

If you're like me, you need to upload files to the same folder on the remote machine many times throughout the day. If you're taking advantage of the VCP command-line SFTP utility for secure file transfers, it's often inconvenient to bring up a command prompt and type in the command and the full path to the folder or files you want to transfer each time you need to upload.

Ever wish you could securely upload a file to a remote server by simply dragging and dropping right from Windows Explorer? You can by combining VCP, VBScript, and a desktop shortcut to allow drag and drop SFTP transfers to a folder on a remote machine.

These are the steps to take:

  1. Create a VBScript that wraps Vcp.exe so that you can drag from Windows Explorer onto a desktop shortcut to perform secure uploads. The code for this script is provided below. Be sure to change the indicated variables to match the machine or session to which you are connecting, your username, your public key, and the destination folder.

  2. Create a shortcut on the Desktop to the VBScript created in Step 1 so that you can drag from Explorer onto this shortcut. A shortcut to this script can also be created in the "Send To" folder by right-clicking on the Windows Start menu, clicking on "Explore", and creating the shortcut in the "SendTo" folder.

Once you have successfully completed Steps 1 and 2, you should be able to drag and drop both files and folders from Explorer onto the Desktop shortcut and the selected files and folders will be uploaded to the specified folder on the remote machine indicated within the script.

For SecureFX® users, this can also be done with Sfxcl.exe, the command-line SFTP utility. Here is a link to VBScript code that uses SFXCL: SFXCL VBSCript code

Save the following VBScript code to a .vbs file on your machine. 
Edit the file and modify the following variables:
g_szRemoteUserMachine: your username g_szRemoteDestination: destination folder on remote machine g_szIdentityFile: identity file to use when connecting
'~~~~~~~~~~~~~~~~~~~~ Begin DragAndDropVCP.vbs ~~~~~~~~~~~~~~~~~~~~~~~~~~
' This script demonstrates how to use drag and drop to transfer ' files to a pre-determined directory on a pre-determined remote ' machine using the Vcp.exe command-line utility that is ' included with VShell server and SecureCRT. ' ' Running this script without any arguments will present ' a dialog explaining setup and usage information.
Option Explicit
Dim g_vArgs, g_fso, g_shell Set g_vArgs = WScript.Arguments Set g_fso = CreateObject("Scripting.FileSystemObject") Set g_shell = CreateObject("WScript.Shell")
Dim g_szVcpExePath, g_szRemoteUserMachine, g_szRemoteDestination, g_szIdentityFile
' Modify this username@machine to reflect your username and the remote machine g_szRemoteUserMachine = "jdev@blacktail"
' Modify this to reflect the path to the destination folder on the remote ' machine g_szRemoteDestination = "Temp:\VCP Testing"
' Modify this private key path to match your own. For the sake of ' this script, we have created a special private key that is not ' protected by a passphrase. This setup would not be recommended ' if you are not the only one with exclusive access to your machine. g_szIdentityFile = "C:\Temp\identity"
Main
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub Main()
    ' Get the path to VCP.exe from the registry.     Dim szReg     szReg = "HKLM\Software\VanDyke\SecureCRT\Install\Main Directory"     g_szVcpExePath = g_shell.RegRead(szReg) & "\vcp.exe"
    If g_vArgs.Count < 1 Then         ShowUsage         Exit Sub     End If
    Redim vFilenames(g_vArgs.Count)
    ' used for parameters that are not valid files/folders     Redim vUnknown(g_vArgs.Count)
    Dim nIndex, szFileList, nValidFilesAndFoldersCount     Dim szCurrentFileOrFolder, nUnknownCount
    nUnknownCount = 0     nValidFilesAndFoldersCount = 0     For nIndex = 0 To g_vArgs.Count - 1         ' We could also probably check to make sure that we have access         ' to the files, but we're just going to live with access denied         ' errors.         szCurrentFileOrFolder = g_vArgs(nIndex)         If g_fso.FileExists(szCurrentFileOrFolder) Or _             g_fso.FolderExists(szCurrentFileOrFolder) Then             vFilenames(nIndex) = szCurrentFileOrFolder             szFileList = szFileList & vFilenames(nIndex) & vbCrlf             nValidFilesAndFoldersCount = nValidFilesAndFoldersCount + 1
        Else             vUnknown(nUnknownCount) = szCurrentFileOrFolder             nUnknownCount = nUnknownCount + 1         End If     Next
    ' For visual confirmation that drag and drop is working     ' correctly, uncomment the following lines to display a     ' message box with the arguments to this script and then     ' exit...     'MsgBox szFileList     'Exit Sub
    If nUnknownCount > 0 Then         ' We don't ever expect this to happen, but just in case...         Dim szUnknownList         For nIndex = 0 To nUnknownCount - 1             szUnknownList = szUnknownList & vUnknown(nIndex) & vbCrlf         Next         MsgBox "These parameters were files or folders" & vbcrlf & _                "that did not exist:" & vbCrlf & vbCrlf & szUnknownList     End If

    ' Now upload each valid file or folder to the remote machine     Dim szVCPCommand, szVCPArgs, nResult
    szVCPArgs = " -v -i " & chr(34) & g_szIdentityFile & chr(34)     For nIndex = 0 To nValidFilesAndFoldersCount - 1         If g_fso.FolderExists(vFilenames(nIndex)) Then             ' If the item is a folder, we'll need to supply the " -r "             ' cmd line arg to VCP             szVCPArgs = szVCPArgs & " -r "         Else             ' ... it must be a file that we are uploading             szVCPArgs = szVCPArgs & " "         End If
        ' Now let's build up our command line. We use chr(34) (") to work         ' around possible spaces in our VCP.exe and remote paths.         szVCPCommand = chr(34) & g_szVcpExePath & chr(34) & _                        szVCPArgs & " " & _                        chr(34) & vFilenames(nIndex) & chr(34) & " " & _                        g_szRemoteUserMachine & ":" & chr(34) & _                        g_szRemoteDestination & chr(34)
    ' To take a sneak peek at the command line, uncomment the 2 lines     ' below:     'If Not Continue("Upload using the following command?" & _     '                vbCrlf & chr(9) & szVCPCommand) Then Exit Sub
        ' Now run the actual VCP command...         ' The number 7 below is used to launch VCP in a minimized cmd window.         ' If you want the window to be hidden, use 0 (Zero) as the argument         ' in place of 7.         ' "True" instructs the scripting engine to wait until VCP is complete         ' before continuing. If you would like to transfer all files in         ' parallel, replace the True with False below.         nResult = g_shell.Run(szVCPCommand, 7, False)         If nResult <> 0 Then             MsgBox "Failed to upload using the following command: " & _                 vbCrlf & chr(9) & szVCPCommand & vbCrlf & vbCrlf & _                 "Error code: " & nResult         End If
        WScript.Sleep 50
        ' Reset the command and args         szVCPArgs = ""         szVCPCommand = ""     Next End Sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Private Sub ShowUsage()     MsgBox "UploadToRemote Usage:" & chr(13) & chr(13) & _         "1. Create a Desktop shortcut to this .vbs file." & vbCrlf & _         "If the .vbs extension is not set to run wscript.exe" & vbcrlf & _         "automatically on your system, create a shortcut with" & vbcrlf & _         "the path set to: " & vbCrlf & _         chr(9) & "<path to wscript.exe> <path to this .vbs file>" & _         vbCrlf & vbCrlf & _         "You may also want to create a shortcut in your" & vbcrlf & _         """Send To"" folder allowing you to right-click" & vbcrlf & _         "on selected files from within Explorer and" & vbcrlf & _         "Send To -> (Machine Name)" & vbcrlf & vbcrlf & _         "2. Use SecureCRT's Key Generation Wizard to create a" & vbcrlf & _         "private key file that has an empty passphrase and" & vbcrlf & _         "upload the corresponding public key to the SSH" & vbcrlf & _         "server. This will allow you to connect and" & vbcrlf & _         "authenticate with the remote SSH server without" & vbcrlf & _         "having to input a passphrase or a password. Note" & vbcrlf & _         "that you could also supply these using the " & vbcrlf & _         "'-p <passphrase>' and '-pw <password>' command" & vbcrlf & _         "line options and you will need to modify the szVCPArgs" & vbcrlf & _         "variable in this script to add these options and" & vbcrlf & _         "values." & _         vbcrlf & vbcrlf & _         "3. Drag and drop files or folders from Explorer onto" & vbcrlf & _         "the Desktop shortcut for this .vbs file" End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Function Continue(szMsg)     Continue = True     If msgBox(szMsg, vbYesno) <> vbYes Then Continue = False
End Function
'~~~~~~~~~~~~~~~~~~~~~~~~ End DragAndDropVCP.vbs ~~~~~~~~~~~~~~~~~~~~~~~~~~

VanDyke Software uses cookies to give you the best online experience. Before continuing to use this site, please confirm that you agree to our use of cookies. Please see our Cookie Usage for details.