PowerShell 提供了多种灵活的方式用于下载文件(如从 HTTP/HTTPS、FTP 等协议下载),无论是临时下载、脚本自动化,还是需要进度条、断点续传等功能,都能找到合适的方案。以下是 5 种最简单且常用的 PowerShell 文件下载方法,涵盖不同场景和需求。
![图片[1]_使用 PowerShell 下载文件的 5 种简单方法_知途无界](https://zhituwujie.com/wp-content/uploads/2025/10/d2b5ca33bd20251016120001.png)
方法 1:使用 Invoke-WebRequest(推荐,功能全面)
适用场景:通用 HTTP/HTTPS 下载,支持进度条、自动处理重定向、提取文件内容等,是 PowerShell 3.0 及以上版本中最常用的下载命令。
基本语法:
Invoke-WebRequest -Uri "下载链接" -OutFile "保存路径"
示例:下载图片并保存到本地
Invoke-WebRequest -Uri "https://example.com/image.jpg" -OutFile "C:\Downloads\image.jpg"
常用参数:
-Uri:文件的下载链接(HTTP/HTTPS/FTP 等,但 FTP 需注意兼容性)。-OutFile:指定文件保存的本地路径(如C:\Users\YourName\Downloads\file.zip)。-UseBasicParsing:在旧系统(如 Windows 7 默认 PowerShell 2.0)中避免 HTML 解析警告(PowerShell 5.1+ 通常不需要)。-TimeoutSec:设置超时时间(单位:秒),例如-TimeoutSec 30。
显示下载进度(默认自带):
Invoke-WebRequest 会在控制台显示实时的下载进度条,无需额外配置。
方法 2:使用 Invoke-RestMethod(适合 API/文本类文件)
适用场景:主要用于下载 API 返回的数据(如 JSON/XML)或文本文件,本质是 Invoke-WebRequest 的简化版,但默认只返回内容(不包含响应头等元数据)。如果目标是下载普通文件(如 ZIP、图片),也可用,但通常优先用 Invoke-WebRequest。
基本语法:
Invoke-RestMethod -Uri "下载链接" -OutFile "保存路径"
示例:下载文本文件
Invoke-RestMethod -Uri "https://example.com/data.txt" -OutFile "C:\Downloads\data.txt"
注意:
- 如果下载的是二进制文件(如图片、压缩包),虽然能用,但更推荐
Invoke-WebRequest(因为Invoke-RestMethod设计初衷是处理结构化数据)。 - 默认不显示进度条(若需要进度,优先选方法 1)。
方法 3:使用 System.Net.WebClient(传统 .NET 方法,兼容性强)
适用场景:适合所有 PowerShell 版本(包括旧版如 2.0),通过 .NET 类实现下载,语法简单,但功能较基础(无内置进度条,需手动实现)。
基本语法:
$client = New-Object System.Net.WebClient
$client.DownloadFile("下载链接", "保存路径")
示例:下载文件
$client = New-Object System.Net.WebClient
$client.DownloadFile("https://example.com/document.pdf", "C:\Downloads\document.pdf")
优点:
- 兼容 PowerShell 2.0 及更早版本(只要系统有 .NET Framework)。
- 代码简洁,适合快速脚本。
缺点:
- 无内置进度条(需通过事件订阅实现,较复杂)。
- 不支持自动重定向等高级特性(但基本下载够用)。
方法 4:使用 Start-BitsTransfer(后台传输,支持断点续传)
适用场景:适合大文件下载(如软件安装包、视频等),基于 Windows 的 BITS(Background Intelligent Transfer Service)服务,支持 后台下载、断点续传、带宽限制,但仅限 HTTP/HTTPS/FTP 协议,且需要目标服务器支持 BITS。
基本语法:
Start-BitsTransfer -Source "下载链接" -Destination "保存路径"
示例:下载大文件(后台静默传输)
Start-BitsTransfer -Source "https://example.com/largefile.zip" -Destination "C:\Downloads\largefile.zip"
常用参数:
-Source:下载链接(必须为 HTTP/HTTPS/FTP)。-Destination:本地保存路径。-DisplayName:为传输任务指定名称(方便管理)。-Priority:设置优先级(如High/Normal/Low)。-Description:添加任务描述。
优点:
- 后台下载(不占用当前 PowerShell 窗口)。
- 断点续传(网络中断后可恢复)。
- 自动处理身份验证(如需要)。
缺点:
- 仅支持 HTTP/HTTPS/FTP(不支持其他协议如 SFTP)。
- 依赖 Windows 系统的 BITS 服务(通常默认启用)。
方法 5:使用 curl 或 wget(Windows 10/11 自带,兼容 Linux 习惯)
适用场景:如果你熟悉 Linux 的 curl 或 wget 命令,Windows 10/11 及 PowerShell 5.1+ 已内置这两个工具(无需安装),可直接在 PowerShell 中使用。
(1)使用 curl(注意:Windows 自带的 curl 是别名,实际调用的是 Invoke-WebRequest 的简化版)
curl -L -o "保存路径" "下载链接"
-L:跟随重定向(重要!)。-o:指定输出文件路径(注意是-o不是-OutFile)。
示例:
curl -L -o "C:\Downloads\example.zip" "https://example.com/example.zip"
(2)使用 wget(同样为内置别名,功能类似)
wget -O "保存路径" "下载链接"
-O:指定输出文件路径。
示例:
wget -O "C:\Downloads\example.zip" "https://example.com/example.zip"
注意:
- Windows 自带的
curl和wget是 命令行工具的别名(实际调用的是Invoke-WebRequest/System.Net.WebClient的简化逻辑),功能可能不如原生 Linux 版强大。 - 如果遇到问题(如重定向失败),推荐优先用
Invoke-WebRequest(方法 1)。
总结对比表
| 方法 | 命令/工具 | 适用场景 | 是否显示进度条 | 支持协议 | 备注 |
|---|---|---|---|---|---|
| 方法 1 | Invoke-WebRequest | 通用 HTTP/HTTPS 下载(推荐) | ✅ 默认显示 | HTTP/HTTPS(部分 FTP) | 功能全面,支持重定向、自动解析,PowerShell 3.0+ |
| 方法 2 | Invoke-RestMethod | API/文本文件下载 | ❌ 无进度条 | HTTP/HTTPS | 适合结构化数据(如 JSON/XML),文件下载可用但不常用 |
| 方法 3 | System.Net.WebClient | 兼容旧版 PowerShell(2.0+) | ❌ 无进度条 | HTTP/HTTPS/FTP | 传统 .NET 方法,代码简单但功能基础 |
| 方法 4 | Start-BitsTransfer | 大文件/后台下载(支持断点续传) | ❌ 无进度条(后台运行) | HTTP/HTTPS/FTP | 依赖 BITS 服务,适合大文件或不稳定网络 |
| 方法 5 | curl / wget | 熟悉 Linux 命令的用户 | ❌(默认无,需参数) | HTTP/HTTPS(部分 FTP) | Windows 10/11 自带,本质是别名(推荐优先用方法 1) |
📌 推荐选择
- 大多数场景(推荐):使用 **
Invoke-WebRequest(方法 1)** —— 功能全面、语法简单、支持进度条,适合 HTTP/HTTPS 下载。 - 大文件或需要断点续传:使用 **
Start-BitsTransfer(方法 4)** —— 后台下载、自动续传,适合不稳定网络环境。 - 兼容旧系统(如 PowerShell 2.0):使用 **
System.Net.WebClient(方法 3)** —— 无需额外依赖,但无进度条。 - 熟悉 Linux 命令:可尝试 **
curl -L -o或wget -O(方法 5)**,但优先推荐原生 PowerShell 命令。
根据你的具体需求(如是否需要进度、文件大小、网络环境),选择最适合的方法即可!

























暂无评论内容