Search code examples
adodbwshjscript

Windows Script Host (jscript): how do i download a binary file?


i'm trying to automate a file download with Windows Script Host (JScript). i see ADODB.Stream has an Open method whose documentation makes it seem like it should be possible to open a HTTP URL and stream the response body:

var url = 'http://example.com/example.tar.gz';
var path = 'example.tar.gz';

var input = WScript.CreateObject('ADODB.Stream');

input.Open(url);
input.SaveToFile(path);
input.Close();

But it bombs on the Open call with

(null): Object or data matching the name, range, or selection criteria was not found within the scope of this operation.


Solution

  • Here is the download code in JScript. Also added some references to API information.

    var Source = WScript.Arguments.Item(0);
    var Target = WScript.Arguments.Item(1);
    var Object = WScript.CreateObject('MSXML2.XMLHTTP');
    
    Object.Open('GET', Source, false);
    Object.Send();
    
    if (Object.Status == 200)
    {
        // Create the Data Stream
        var Stream = WScript.CreateObject('ADODB.Stream');
    
        // Establish the Stream
        Stream.Open();
        Stream.Type = 1; // adTypeBinary
        Stream.Write(Object.ResponseBody);
        Stream.Position = 0;
    
        // Create an Empty Target File
        var File = WScript.CreateObject('Scripting.FileSystemObject');
        if (File.FileExists(Target))
        {
            File.DeleteFile(Target);
        }
    
        // Write the Data Stream to the File
        Stream.SaveToFile(Target, 2); // adSaveCreateOverWrite
        Stream.Close();
    }
    

    ADODB Stream:

    Scripting.FileSystemObject: