📜  带有进度的 powershell 下载文件 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:54:06.741000             🧑  作者: Mango

带有进度的 PowerShell 下载文件

在 PowerShell 中下载文件是一个常见的操作。本文介绍使用 PowerShell 下载文件,并添加进度指示器以提高用户体验。

使用 WebClient 下载文件

PowerShell 的 WebClient 类提供了一种简单的方法来下载文件。以下是一个示例脚本,可用于下载指定 URL 的文件:

$sourceUrl = "https://example.com/file.zip"
$targetPath = "C:\downloads\file.zip"

$wc = New-Object System.Net.WebClient
$wc.DownloadFile($sourceUrl, $targetPath)

此代码将下载位于 $sourceUrl 所指定的文件,并将其存储在 $targetPath 所指定的位置。但是,它不会提供任何指示器,以告知用户下载进度或下载速度。

添加进度指示器

为了帮助用户更好地了解下载进度和速度,我们可以将其添加到脚本中。以下是一个示例脚本,使用 [System.Net.WebRequestMethods+File]::DownloadFile 方法来下载文件,并添加进度指示器:

$sourceUrl = "https://example.com/file.zip"
$targetPath = "C:\downloads\file.zip"

$progress = 0
$wc = New-Object System.Net.WebClient
$wc.DownloadProgressChanged += `
    { 
        $progress = $_.ProgressPercentage
        Write-Progress -Activity "Downloading $($_.TotalBytesToReceive / 1MB) MB..." -PercentComplete $progress 
    }
$wc.DownloadFileCompleted += { Write-Host "Download complete." }
$wc.DownloadFileAsync($sourceUrl, $targetPath)

While ($progress -lt 100){
    Start-Sleep -Seconds 1
}

此代码将使用 [System.Net.WebRequestMethods+File]::DownloadFile 方法下载指定网址的文件,并在下载过程中更新进度指示器。下载完成后,它将输出“Download complete.”。

有趣的是,这个示例使用一个异步方法来执行下载操作。这使得脚本可以一边下载一边更新进度指示器,而不会在页面冻结或等待下载完成的情况下停止执行。为了确保在下载完成之前不会退出脚本,我们还添加了一个 While 循环,以等待下载完成。

#结论

现在你已经学会了如何在 PowerShell 中下载文件,并添加进度指示器。这将有助于您提高用户体验,并使您的下载脚本更加完善。