我需要从网站上下载一个exe格式的文件,并运行它。我尝试了许多命令,但都没有成功。你可以帮我吗?非常感谢您的帮助,祝您有美好的一天。
我需要从网站上下载一个exe格式的文件,并运行它。我尝试了许多命令,但都没有成功。你可以帮我吗?非常感谢您的帮助,祝您有美好的一天。
您需要的脚本将执行两个操作。首先,我们将下载文件并将其存储在可访问的位置。其次,我们将使用所需的任何参数运行可执行文件,以使其成功安装。
我们有两种方法来完成此任务。第一种是使用Invoke-Webrequest
。我们所需的仅有的两个参数是.exe文件的URL和我们想要该文件在本地机器上的位置。
$url = "http://www.contoso.com/pathtoexe.exe"
$outpath = "$PSScriptRoot/myexe.exe"
Invoke-WebRequest -Uri $url -OutFile $outpath
我在这里使用$PSScriptRoot
,因为它可以让我把exe文件放到运行PowerShell脚本的同一位置,但是如果你想要放在其他位置,例如C:/temp或downloads等路径,随意更改。当处理较大的文件时,您可能会发现Invoke-WebRequest
方法需要很长时间。如果出现这种情况,我们可以直接调用.Net并希望加快速度。
我们将设置变量$url和$outpath相同,但是不再使用Invoke-WebRequest
,而是使用以下 .Net 代码:
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $outpath)
调用可执行文件是容易的部分。
$args = @("Comma","Separated","Arguments")
Start-Process -Filepath "$PSScriptRoot/myexe.exe" -ArgumentList $args
这就差不多够了。
作为 Invoke-WebRequest 的替代方案,我更喜欢 Start-BitsTransfer,它速度更快。在我的系统上,对于一个90MB的文件,差异是10秒 vs 100秒。
这里有一个示例脚本,可以静默下载和安装 VS Code。改编自 这里
$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