This is an old revision of the document!

Using WinSCP .NET Assembly from WSH-hosted Active Scripting Languages

This feature will be available only with the next release.

Advertisement

Installing and Registering for COM

First, you need to install the WinSCP .NET assembly and register it for COM.

Using from WSH

You use WinSCP .NET assembly from WSH as any other COM library.

Though there are some less known techniques that you may need to use, which are described in following sections.

Accessing Enumeration Values

As JScript and VBScript access COM classes via IDispatch, they do not make use of type library, hence they do not have direct access to constants defined there, like Protocol.Sftp for instance. To use these, you have to instruct WSH to import the type library into the script namespace.

You can use Windows Script File (WSF) and its <reference> tag for that. It makes WSH import all enums from the assembly type library into constants in script namespace with name like <type>_<member>, e.g. Protocol.Sftp becomes Protocol_Sftp.

See how <reference object="WinSCP.Session"/> allows use of Protocol_Sftp in below JScript script embedded in WSF:

<job>
<reference object="WinSCP.Session" />
<script language="JScript">
 
var sessionOptions = WScript.CreateObject("WinSCP.SessionOptions");
sessionOptions.Protocol = Protocol_Sftp;
sessionOptions.HostName = "example.com";
sessionOptions.UserName = "user";
sessionOptions.Password = "mypassword";
sessionOptions.SshHostKey = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx";
 
var session = WScript.CreateObject("WinSCP.Session");
 
session.Open(sessionOptions);
 
session.PutFiles("d:\\toupload\\*", "/home/user/");
 
</script>
</job>

Advertisement

You run the .wsf file the same way as you run .js or .vbs:

cscript upload.wsf

Event Handlers

The Session class exposes several events.

If you need to make use of these events:

  • Use overload of WScript.CreateObject with 2 arguments, passing an unique prefix as the second argument (e.g. “session_”);
  • Define function with name <prefix><event> and two arguments (e.g. sender and e) for every event you need to handle.

See following JScript snippet:

function session_FileTransferred(sender, e)
{
    WScript.Echo(e.FileName, "=>", e.Destination);
}
 
var session = WScript.CreateObject("WinSCP.Session", "session_");

And equivalent in VBScript:

Sub session_FileTransferred(sender, e)
    WScript.Echo e.FileName, "=>", e.Destination
End Sub
 
Set session = WScript.CreateObject("WinSCP.Session", "session_")

JScript Example

This example is functionally equivalent to overall C# example for WinSCP .NET assembly.

<job>
<reference object="WinSCP.Session" />
<script language="JScript">
 
// Setup session options
var sessionOptions = WScript.CreateObject("WinSCP.SessionOptions");
sessionOptions.Protocol = Protocol_Sftp;
sessionOptions.HostName = "example.com";
sessionOptions.UserName = "user";
sessionOptions.Password = "mypassword";
sessionOptions.SshHostKey = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx";
 
var session = WScript.CreateObject("WinSCP.Session");
 
// Connect
session.Open(sessionOptions);
 
// Upload files
var transferOptions = WScript.CreateObject("WinSCP.TransferOptions");
transferOptions.TransferMode = TransferMode_Binary;
 
var transferResult = session.PutFiles("d:\\toupload\\*", "/home/user/", false, transferOptions);
 
// Throw on any error
transferResult.Check();
 
// Print results
for (var enumerator = new Enumerator(transferResult.Transfers); !enumerator.atEnd(); enumerator.moveNext())
{
    WScript.Echo("Upload of", enumerator.item().FileName, "succeeded");
}
 
</script>
</job>

Advertisement

VBScript Example

This example is functionally equivalent to overall C# example for WinSCP .NET assembly.

<job>
<reference object="WinSCP.Session" />
<script language="VBScript">
 
' Setup session options
Set sessionOptions = WScript.CreateObject("WinSCP.SessionOptions")
sessionOptions.Protocol = Protocol_Sftp
sessionOptions.HostName = "example.com"
sessionOptions.UserName = "user"
sessionOptions.Password = "mypassword"
sessionOptions.SshHostKey = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
 
Set session = WScript.CreateObject("WinSCP.Session")
 
' Connect
session.Open sessionOptions
 
' Upload files
Set transferOptions = WScript.CreateObject("WinSCP.TransferOptions")
transferOptions.TransferMode = TransferMode_Binary
 
Set transferResult = session.PutFiles("d:\\toupload\\*", "/home/user/", False, transferOptions)
 
' Throw on any error
transferResult.Check
 
' Print results
For Each transfer In transferResult.Transfers
    WScript.Echo "Upload of", transfer.FileName, "succeeded"
Next
 
</script>
</job>

Last modified: by martin