普通网友 2025-09-14 17:10 采纳率: 98.8%
浏览 7
已采纳

Windows PowerShell如何使用命令行下载文件?

**问题:** 在Windows系统中,如何使用PowerShell命令行下载文件?有哪些常用命令可以实现文件下载功能?它们之间有何区别?是否支持断点续传或下载进度显示?如何通过PowerShell脚本自动下载网络上的资源文件,例如软件安装包或配置文件?在受限的网络环境下(如需代理或认证),如何配置PowerShell下载文件?这些方法是否适用于不同版本的Windows系统,如Windows 10、Windows Server以及旧版本的Windows?
  • 写回答

1条回答 默认 最新

  • 风扇爱好者 2025-10-22 04:09
    关注

    一、PowerShell下载文件的基本方法

    在Windows系统中,使用PowerShell命令行下载文件是一种常见且高效的方式。最常用的命令是 Invoke-WebRequestStart-BitsTransfer

    • Invoke-WebRequest:适用于简单的网页内容或文件下载任务。
    • Start-BitsTransfer:适用于大文件下载,支持后台传输和断点续传。
    
    # 使用 Invoke-WebRequest 下载文件
    Invoke-WebRequest -Uri "https://example.com/file.txt" -OutFile "C:\temp\file.txt"
    
    # 使用 Start-BitsTransfer 下载文件
    Start-BitsTransfer -Source "https://example.com/file.txt" -Destination "C:\temp\file.txt"
    

    二、常用命令的区别与适用场景

    命令是否支持断点续传是否支持进度显示适用场景
    Invoke-WebRequest小文件、快速下载、脚本中调用
    Start-BitsTransfer是(通过监听)大文件、网络不稳定、需要后台传输

    三、断点续传与下载进度显示

    虽然 Invoke-WebRequest 不支持断点续传,但 Start-BitsTransfer 可以实现。此外,可以通过以下方式获取下载进度:

    
    $job = Start-BitsTransfer -Source "https://example.com/largefile.iso" -Destination "C:\temp\largefile.iso" -Asynchronous
    while ($job.JobState -eq "Connecting" -or $job.JobState -eq "Transferring") {
        Write-Progress -Activity "Downloading" -Status $job.JobState -PercentComplete $job.BytesTransferred / $job.BytesTotal * 100
        Start-Sleep -Seconds 1
    }
    

    四、在受限网络环境下的配置

    在需要代理或认证的网络环境中,可以使用以下方法配置PowerShell:

    • 设置系统级代理:通过 netsh winhttp set proxy 命令。
    • 在脚本中设置代理:
    
    $proxy = New-Object System.Net.WebProxy("http://proxy.example.com:8080")
    [System.Net.WebRequest]::DefaultWebProxy = $proxy
    

    对于需要认证的代理,可以添加用户名和密码:

    
    $proxy.Credentials = Get-Credential
    

    五、PowerShell版本与系统兼容性

    不同版本的Windows系统支持的PowerShell命令略有不同:

    • Windows 7 / Server 2008 R2 及以上默认安装PowerShell 2.0。
    • PowerShell 3.0及以上版本支持 Invoke-WebRequest
    • 建议升级到PowerShell 5.1 或 PowerShell Core 7.x 以获得更好的兼容性与功能支持。

    六、自动化下载脚本示例

    以下是一个自动化下载软件安装包的脚本示例:

    
    $source = "https://download.example.com/software/setup.exe"
    $destination = "$env:TEMP\setup.exe"
    
    if (Test-Path $destination) {
        Remove-Item $destination
    }
    
    Start-BitsTransfer -Source $source -Destination $destination
    
    if (Test-Path $destination) {
        Write-Host "下载完成,文件位于:$destination"
        # 可继续执行安装命令
        # Start-Process -FilePath $destination -ArgumentList "/S"
    }
    

    七、流程图:PowerShell下载文件的决策路径

    graph TD A[开始] --> B{是否需要断点续传?} B -->|是| C[使用Start-BitsTransfer] B -->|否| D[使用Invoke-WebRequest] C --> E{是否需要代理认证?} E -->|是| F[配置WebProxy对象] E -->|否| G[直接下载] D --> H{是否需要简单快速下载?} H -->|是| I[执行下载] H -->|否| J[考虑使用其他工具如curl或wget]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月14日