使用Powershell下载并运行exe文件

18

我需要从网站上下载一个exe格式的文件,并运行它。我尝试了许多命令,但都没有成功。你可以帮我吗?非常感谢您的帮助,祝您有美好的一天。


你正在尝试安装 PowerShell 吗? - Manish Jaiswal
5
通常我不会回答这样的问题,但是对于一个喝着咖啡开始周六早晨的挑战来说,这感觉很有趣。下次如果你像这样提问,请准备好你已经编写的代码和出现的错误信息。Stack Overflow是一个社区故障排除引擎,而不是免费的脚本服务。 - Bryce McDonald
2个回答

26

您需要的脚本将执行两个操作。首先,我们将下载文件并将其存储在可访问的位置。其次,我们将使用所需的任何参数运行可执行文件,以使其成功安装。

步骤1:

我们有两种方法来完成此任务。第一种是使用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)

步骤2:

调用可执行文件是容易的部分。

$args = @("Comma","Separated","Arguments")
Start-Process -Filepath "$PSScriptRoot/myexe.exe" -ArgumentList $args

这就差不多够了。


能否将其压缩成一行代码? - Shankara Narayana

0

作为 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接