我尝试了以下
调用-Web请求-Uri”https://download.microsoft.com/download/6/4/8/648EB83C-00F9-49B2-806D-E46033DA4AE6/ExchangeServer2016-CU1.iso“-OutFile“Exchange.iso”
但由于“OutOfMemory”而失败。
然后我尝试了 -TransferEncoding“chunked”,它告诉我必须先设置“SendChunked”属性。
文档没有告诉如何、在何处以及何时设置此属性......
答案1
PowerShell 限制远程连接(旧版本限制为 128MB 左右)。您可以使用 增加该限制Set-Item .\MaxMemoryPerShellMB
。但这可能无法解决非常大的文件的问题。
最好的选择是使用 BITS
例子:
$url = "http://files.net/test/file1.test"
$output = "$PSScriptRoot\file1.test"
$start_time = Get-Date
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
***OR***
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
或者,尝试.Net.WebClient:
$url = "http://files.net/test/file1.test"
$output = "$PSScriptRoot\file1.test"
$start_time = Get-Date
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $output)
***OR***
(New-Object System.Net.WebClient).DownloadFile($url, $output)
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
答案2
BitsTransfer 适用于大文件。下面是一个使用 Write-Progress 的示例。一旦启动作业并获得引用 ($download),您就可以与其交互以显示下载进度。我发现 Complete-BitsTransfer 是必要的后续步骤,因为如果没有它,文件的名称就会是“BIT52DB.tmp”,而不是“exampleFile.zip”。
$output = "C:\ProgramFiles\LocalPath\exampleFile.zip";
$download = Start-BitsTransfer -Source $url -Destination $output -Asynchronous
while ($download.JobState -ne "Transferred") {
[int] $dlProgress = ($download.BytesTransferred / $download.BytesTotal) * 100;
Write-Progress -Activity "Downloading File..." -Status "$dlProgress% Complete:" -PercentComplete $dlProgress;
}
Complete-BitsTransfer $download.JobId;