Reputation: 239
i need to download file from website and then run this file. File is in exe format. I tried many commands, but unsuccessfully. Could you help me. Thanks a lot for help and have a nice day.
Upvotes: 19
Views: 62721
Reputation: 807
As an alternative to Invoke-WebRequest, I prefer Start-BitsTransfer which is much faster. On my system, for a 90MB file the difference was 10 seconds vs 100 seconds.
Here's an example script that downloads and installs VS Code silently. Adapted from here
$FileUri = "https://update.code.visualstudio.com/latest/win32-x64-user/stable"
$Destination = "D:/downloads/vscodeInstaller.exe"
$bitsJobObj = Start-BitsTransfer $FileUri -Destination $Destination
switch ($bitsJobObj.JobState) {
'Transferred' {
Complete-BitsTransfer -BitsJob $bitsJobObj
break
}
'Error' {
throw 'Error downloading'
}
}
$exeArgs = '/verysilent /tasks=addcontextmenufiles,addcontextmenufolders,addtopath'
Start-Process -Wait $Destination -ArgumentList $exeArgs
Upvotes: 1
Reputation: 1870
The script you are wanting is going to do two things. First, we will download a file and store it in an accessible location. Second, we will then run the executable with whatever arguments we need to have it install successfully.
We have two ways of accomplishing this task. The first is to use Invoke-Webrequest
. The only two arguments we need for it will be the URL of the .exe file, and where we want that file to go on our local machine.
$url = "http://www.contoso.com/pathtoexe.exe"
$outpath = "$PSScriptRoot/myexe.exe"
Invoke-WebRequest -Uri $url -OutFile $outpath
I use $PSScriptRoot
here because it will let me drop the exe right next to where the Powershell script is running, but feel free to put a path of your choice in, like C:/temp or downloads or whatever you want. You may notice that with larger files, the Invoke-WebRequest
method takes a long time. If this is the case, we can call .Net directly and hopefully speed things up.
We will set our variables of $url and $outpath the same, but instead of Invoke-WebRequest
we will use the following .Net code:
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $outpath)
Calling an executable is the easy part.
$args = @("Comma","Separated","Arguments")
Start-Process -Filepath "$PSScriptRoot/myexe.exe" -ArgumentList $args
And that should just about do it for you.
Upvotes: 27