BITS:Background Intelligent Transfer Service,后台智能传输服务,bitsadmin.exe 是 BITS 服务的命令行管理工具,截图为 bitsadmin /? BITS 是 Windows 系统自带后台异步文件传输组件后台下载 / 上传 Windows 下命令行下载文件的方法;在 Windows 操作系统中通过命令行下载文件的各种方法与工具;

 

bitsadmin.exe 3.0 配套链(全枚举,分:单命令|双参数组合|多命令组合场景)

BITSADMIN 3.0,后台智能传输服务,支持断点续传、空闲带宽后台传输;任务生命周期链:创建任务 → 添加文件 → 设置属性(优先级 / 代理 / 证书 / 重试)→ 启动 → 监控状态 → 等待完成 → 提交 complete /cancel 取消。

一、单个基础命令(原子命令)

序号 命令 简要说明
1 bitsadmin /? 查看完整帮助文档
2 bitsadmin /list 列出当前用户所有 BITS 任务
3 bitsadmin /list /allusers /verbose 列出本机全部用户的任务,输出详细信息
4 bitsadmin /monitor /allusers /refresh 3 实时监控所有用户任务,3 秒刷新一次
5 bitsadmin /reset /allusers 清空本机所有用户全部 BITS 任务
6 bitsadmin /create /download mydl 创建下载类型任务,任务名 mydl
7 bitsadmin /create /upload myup 创建上传任务
8 bitsadmin /create /upload-reply myupr 创建上传 + 服务器应答任务
9 bitsadmin /addfile mydl https://xxx/file.iso D:\file.iso 向任务添加单个远程文件下载项
10 bitsadmin /addfileset mydl D:\filelist.txt 批量导入文件列表(文本清单)添加多个文件
11 bitsadmin /addfilewithranges mydl https://xxx/file D:\localfile 0:2000,5000:eof 分段字节范围下载,只获取文件部分区间
12 bitsadmin /replaceremoteprefix mydl https://old.example https://new.example 批量替换任务内 URL 前缀
13 bitsadmin /listfiles mydl 列出任务内所有待传输文件清单
14 bitsadmin /suspend mydl 暂停任务
15 bitsadmin /resume mydl 恢复 / 继续任务传输
16 bitsadmin /cancel mydl 取消任务,丢弃临时缓存
17 bitsadmin /complete mydl 任务传输完成,提交写入本地最终文件(必执行)
18 bitsadmin /info mydl /verbose 查看任务完整详细信息
19 bitsadmin /getstate mydl 获取任务状态(Transferring / Transferred / Error 等)
20 bitsadmin /getbytestotal mydl 获取任务总字节大小
21 bitsadmin /getbytestransferred mydl 获取已经传输字节数
22 bitsadmin /getfilestotal mydl 任务内文件总数
23 bitsadmin /getfilestransferred mydl 已完成传输的文件数量
24 bitsadmin /geterror mydl 获取任务详细错误信息
25 bitsadmin /geterrormycount mydl 获取任务错误重试次数
26 bitsadmin /setpriority mydl HIGH 设置任务优先级:FOREGROUND/HIGH/NORMAL/LOW
27 bitsadmin /setminretrydelay mydl 10 最小重试间隔 10 秒
28 bitsadmin /setnoprogresstimeout mydl 300 无传输进度超时,300 秒
29 bitsadmin /setmaxdownloadtime mydl 3600 任务最大下载总时长 3600 秒
30 bitsadmin /setproxysettings mydl NO_PROXY 不使用代理;可选 PRECONFIG/AUTODETECT/OVERRIDE
31 bitsadmin /setcustomheaders mydl "User-Agent: myagent" 自定义 HTTP 请求头
32 bitsadmin /sethttpmethod mydl GET 指定 HTTP 请求方法 GET/POST
33 bitsadmin /setcredentials mydl SERVER BASIC user1 pwd123 添加服务器基础认证账号密码
34 bitsadmin /removecredentials mydl SERVER BASIC 移除服务器认证凭据
35 bitsadmin /takeshipownership mydl 获取任务所有权
36 bitsadmin /setnotifycmdline mydl D:\notify.exe NULL 任务完成后执行回调程序
37 bitsadmin /transfer mydl /download https://xxx/file.zip D:\file.zip 一键快捷传输(内部封装 create+addfile+resume+complete)

二、双命令组合实例

序号 命令脚本 简要说明
A bitsadmin /create mydl && bitsadmin /addfile mydl https://example.iso D:\iso.iso 创建任务 + 添加下载文件
B bitsadmin /resume mydl && bitsadmin /info mydl /verbose 启动任务,立刻查看任务详情
C bitsadmin /getstate mydl && bitsadmin /getbytestransferred mydl 查询任务状态 + 已下载字节
D bitsadmin /setpriority mydl LOW && bitsadmin /setminretrydelay mydl 15 设置低优先级 + 15 秒重试间隔
E bitsadmin /setproxysettings mydl NO_PROXY && bitsadmin /setcustomheaders mydl "Accept: */*" 关闭代理 + 自定义 HTTP 头
F bitsadmin /list > D:\bits_tasklist.txt && bitsadmin /reset 导出任务清单,然后清空全部任务
G bitsadmin /suspend mydl && bitsadmin /resume mydl 暂停后恢复任务

三、三命令组合实例

序号 命令脚本 简要说明
H bitsadmin /create mydlbitsadmin /addfile mydl https://example.com/file.iso D:\iso.isobitsadmin /resume mydl 完整创建任务、添加文件、启动后台下载
I bitsadmin /info mydl /verbosebitsadmin /getbytestransferred mydlbitsadmin /getstate mydl 查看任务详情、已下载大小、当前任务状态
J bitsadmin /create mydlbitsadmin /setproxysettings mydl NO_PROXYbitsadmin /addfile mydl https://xxx D:\xxx 创建任务,先关闭代理,再添加下载文件

四、多命令完整业务配套链(运维场景)

场景 1:后台下载大文件,阻塞等待传输完成,提交任务,校验文件 | 序号 | 命令脚本 | 简要说明 | | ---- | ---- | ---- |

|Chain1|bitsadmin /create iso_dlbitsadmin /addfile iso_dl https://example.com/win.iso D:\win.isobitsadmin /resume iso_dlbitsadmin /wait iso_dlbitsadmin /complete iso_dlcertutil -hashfile D:\win.iso SHA256| 创建任务、添加 ISO、启动下载;阻塞等待传输结束;提交保存文件;哈希校验文件完整性 |

场景 2:批量文件清单下载,设置任务参数,监控进度,异常取消 | 序号 | 命令脚本 | 简要说明 | | ---- | ---- | ---- |

|Chain2|bitsadmin /create batch_dlbitsadmin /setpriority batch_dl LOWbitsadmin /addfileset batch_dl D:\filelist.txtbitsadmin /resume batch_dlbitsadmin /monitor /refresh 2bitsadmin /cancel batch_dl| 创建批量任务,低优先级,加载外部文件清单;启动;实时监控;最后取消任务 |

场景 3:带认证、自定义请求头的 HTTPS 下载 | 序号 | 命令脚本 | 简要说明 | | ---- | ---- | ---- |

|Chain3|bitsadmin /create auth_dlbitsadmin /setcredentials auth_dl SERVER BASIC admin 123456bitsadmin /setcustomheaders auth_dl "Accept: application/octet-stream"bitsadmin /addfile auth_dl https://example/file D:\file.binbitsadmin /resume auth_dlbitsadmin /wait auth_dlbitsadmin /complete auth_dl| 添加基础认证、自定义请求头,下载受保护资源 |

五、任务生命周期配套链逻辑

创建任务 /create → 设置任务属性(优先级/代理/凭据/HTTP头) → /addfile 添加文件
→ /resume 启动任务 → 循环查询 /getstate /getbytestransferred 监控进度
→ 成功:/wait → /complete 提交保存文件
→ 失败:/geterror 排查错误 → /cancel 清理任务

六、边界注意点

  1. /complete 是关键:不执行 complete,文件保留在 BITS 临时缓存,不会生成最终本地文件。
  2. PE 环境:BITS 服务默认未启动,精简 PE 直接无法使用 bitsadmin。
  3. 任务名称支持中文,含空格必须用英文双引号包裹。
  4. /transfer 是快捷一次性命令,适合简单下载;复杂场景(自定义头、代理、认证)要用 create + addfile 分步链。
PS C:\WINDOWS\system32> bitsadmin.exe /?
BITSADMIN 版本 3.0
BITS 管理工具。
(C) 版权所有 Microsoft 公司

用法:BITSADMIN [/RAWRETURN] [/WRAP | /NOWRAP] 命令

可用命令如下:
/HELP           打印此帮助信息
/?              打印此帮助信息
/UTIL /?        打印工具类命令列表
/PEERCACHING /? 打印对等缓存管理命令列表
/CACHE /?       打印缓存管理命令列表
/PEERS /?       打印对等节点管理命令列表

/LIST    [/ALLUSERS] [/VERBOSE]     列出传输任务
/MONITOR [/ALLUSERS] [/REFRESH 秒数] 监控复制管理器
/RESET   [/ALLUSERS]                删除管理器内全部任务

/TRANSFER <任务名> [类型] [/PRIORITY 优先级] [/ACLFLAGS 标志] [/DYNAMIC]
          远程URL 本地文件名
    传输一个或多个文件。
    [类型] 可选:/DOWNLOAD(下载)或 /UPLOAD(上传);默认是下载
    可指定多组【URL/本地文件】配对。
    和大多数命令不同:<任务名> 只能填写名称,不能使用GUID。
    /DYNAMIC:为任务配置 BITS_JOB_PROPERTY_DYNAMIC_CONTENT,放宽服务器侧要求。

/CREATE [类型] <任务名>               创建任务
    [类型] 可选:/DOWNLOAD、/UPLOAD、/UPLOAD-REPLY;默认下载和大多数命令不同:<任务名> 只能填写名称,不能使用GUID。

/INFO <任务> [/VERBOSE]                   显示任务信息
/ADDFILE <任务> <远程URL> <本地文件名>    向任务添加单个文件
/ADDFILESET <任务> <文本文件>             向任务批量添加多个文件
   文本文件内每行填写远程文件名和本地文件名,空格分隔。
   以 # 开头的行视为注释。
   读取文件列表到内存后,一次性添加到任务。

/ADDFILEWITHRANGES  <任务> <远程URL> <本地文件名 范围列表>
   类似 /ADDFILE,但BITS仅读取URL中指定字节区间。
   range_list 使用逗号分隔多组【偏移量:长度】。
   示例:
       0:100,2000:100,5000:eof
   含义:从偏移0读取100字节;偏移2000读取100字节;偏移5000读取直到文件末尾。

/REPLACEREMOTEPREFIX <任务> <旧前缀> <新前缀>
    将所有以<旧前缀>开头的URL替换为<新前缀>

备注:BITS 当前支持 HTTP/HTTPS 的下载和上传。
URL 也支持 UNC 网络路径、file:// 本地文件路径。

/LISTFILES <任务>                     列出任务内包含的文件
/SUSPEND <任务>                       暂停任务
/RESUME <任务>                        恢复/继续任务
/CANCEL <任务>                        取消任务
/COMPLETE <任务>                      完成任务(提交保存文件)

/GETTYPE <任务>                       获取任务类型
/GETACLFLAGS <任务>                   获取ACL继承标志
/SETACLFLAGS <任务> <ACL标志>         设置任务ACL继承标志
  O - 所有者(OWNER)       G - 组(GROUP)
  D - 自主访问控制列表(DACL)        S - 系统访问控制列表(SACL)
  示例:
      bitsadmin /setaclflags MyJob OGDS
      bitsadmin /setaclflags MyJob OGD

/GETBYTESTOTAL <任务>                 获取任务总文件大小
/GETBYTESTRANSFERRED <任务>           获取已传输字节数
/GETFILESTOTAL <任务>                 获取任务内总文件数量
/GETFILESTRANSFERRED <任务>           获取已传输完成的文件数量
/GETCREATIONTIME <任务>               获取任务创建时间
/GETMODIFICATIONTIME <任务>           获取任务修改时间
/GETCOMPLETIONTIME <任务>             获取任务完成时间
/GETSTATE <任务>                      获取任务状态
/GETERROR <任务>                      获取详细错误信息
/GETOWNER <任务>                      获取任务所有者
/GETDISPLAYNAME <任务>                获取任务显示名称
/SETDISPLAYNAME <任务> <显示名>       设置任务显示名称
/GETDESCRIPTION <任务>                获取任务描述
/SETDESCRIPTION <任务> <描述文本>     设置任务描述

/GETPRIORITY    <任务>                获取任务优先级
/SETPRIORITY    <任务> <优先级>       设置任务优先级
   优先级可选值:
      FOREGROUND(前台)
      HIGH(高)
      NORMAL(普通)
      LOW(低)

/GETNOTIFYFLAGS <任务>                 获取通知标志
/SETNOTIFYFLAGS <任务> <通知标志>      设置通知标志
    此参数更多帮助,请查阅MSDN文档 SetNotifyFlags
/GETNOTIFYINTERFACE <任务>             判断通知接口是否已注册

/GETMINRETRYDELAY <任务>               获取重试间隔(单位:秒)
/SETMINRETRYDELAY <任务> <重试秒数>    设置最小重试延迟(秒)
/GETNOPROGRESSTIMEOUT <任务>           获取无进度超时时间(秒)
/SETNOPROGRESSTIMEOUT <任务> <超时秒>  设置无进度超时(秒)
/GETMAXDOWNLOADTIME <任务>             获取下载总超时(秒)
/SETMAXDOWNLOADTIME <任务> <超时秒>     设置下载最大超时(秒)
/GETERRORCOUNT <任务>                  获取任务错误次数

/SETPROXYSETTINGS <任务> <使用方式>    设置代理配置
   usage可选值:
    PRECONFIG   - 使用任务所有者默认Internet设置。
    AUTODETECT  - 自动检测代理。
    NO_PROXY    - 不使用代理服务器。
    OVERRIDE    - 使用自定义代理列表与例外列表。
                  后面必须跟代理列表、代理绕过列表。
                  空的绕过列表可以写 NULL 或 ""。
  示例:
      bitsadmin /setproxysettings MyJob PRECONFIG
      bitsadmin /setproxysettings MyJob AUTODETECT
      bitsadmin /setproxysettings MyJob NO_PROXY
      bitsadmin /setproxysettings MyJob OVERRIDE proxy1:80 "<local>"
      bitsadmin /setproxysettings MyJob OVERRIDE proxy1,proxy2,proxy3 NULL

/GETPROXYUSAGE <任务>                 获取代理使用模式
/GETPROXYLIST <任务>                  获取代理服务器列表
/GETPROXYBYPASSLIST <任务>            获取代理绕过地址列表
/TAKEOWNERSHIP <任务>                 获取任务所有权

/SETNOTIFYCMDLINE <任务> <程序名> [程序参数]
    设置任务完成后要执行的程序及可选参数。
    程序名、参数都可以设置为NULL。
    重要:如果参数不为NULL,程序名必须作为第一个参数。
  示例:
    bitsadmin /SetNotifyCmdLine MyJob c:\winnt\system32\notepad.exe  NULL
    bitsadmin /SetNotifyCmdLine MyJob c:\callback.exe "c:\callback.exe parm1 parm2"
    bitsadmin /SetNotifyCmdLine MyJob NULL NULL

/GETNOTIFYCMDLINE <任务>              获取任务的通知命令行

/SETCREDENTIALS <任务> <目标> <认证方案> <用户名> <密码>
  为任务添加身份凭证。
  <目标> 可以是 SERVER(服务器)或 PROXY(代理)
  <认证方案>:BASIC、DIGEST、NTLM、NEGOTIATE、PASSPORT。
/REMOVECREDENTIALS <任务> <目标> <认证方案>
  从任务移除身份凭证。

/GETCUSTOMHEADERS <任务>                           获取自定义HTTP请求头
/SETCUSTOMHEADERS <任务> <头1> <头2> <...> 设置自定义HTTP请求头
/MAKECUSTOMHEADERSWRITEONLY <任务>                 将任务自定义HTTP头设为只读(不可撤销)

/GETHTTPMETHOD <任务>                           获取使用的HTTP请求方法
/SETHTTPMETHOD <任务> <HTTPMethod>              设置HTTP请求方法

/GETCLIENTCERTIFICATE <任务>                       获取任务客户端证书信息
/SETCLIENTCERTIFICATEBYID <任务> <存储位置> <存储名称> <十六进制证书ID>
  为任务设置客户端身份认证证书。
  <存储位置>取值:
        1(CURRENT_USER 当前用户), 2(LOCAL_MACHINE 本地计算机), 3(CURRENT_SERVICE 当前服务),
        4(SERVICES 服务), 5(USERS 用户), 6(CURRENT_USER_GROUP_POLICY 当前用户组策略),
        7(LOCAL_MACHINE_GROUP_POLICY 本地计算机组策略) or 8(LOCAL_MACHINE_ENTERPRISE 本地计算机企业)。
/SETCLIENTCERTIFICATEBYNAME <任务> <存储位置> <存储名称> <主题名称>
  按证书主题名称设置客户端认证证书。存储位置取值同上。
/REMOVECLIENTCERTIFICATE <任务>                删除任务客户端证书

/SETSECURITYFLAGS <任务> <数值>
   设置传输过程中URL重定向、服务器证书校验相关HTTP安全标志。
   值为无符号整数,二进制位定义:
     启用CRL吊销检查                                 : 最低位置1
     忽略服务器证书公用名称不匹配                     : 右数第2位置1
     忽略服务器证书过期时间错误                       : 右数第3位置1
     忽略服务器证书颁发机构无效                       : 右数第4位置1
     忽略证书用途不匹配                               : 右数第5位置1
     重定向策略                                       : 由右数第9~11位控制
         0,0,0  - 自动允许重定向。
         0,0,1  - 发生重定向时,更新IBackgroundCopyFile接口中的远程名称。
         0,1,0  - 一旦出现重定向,任务直接失败。
     允许HTTPS重定向到HTTP                            : 右数第12位置1

/GETSECURITYFLAGS <任务>
   获取传输时URL重定向、服务器证书校验的HTTP安全标志。

/SETVALIDATIONSTATE  <任务>  <文件索引> <true|false>
      <文件索引> 从0开始计数
    设置任务内指定文件的内容验证状态。
/GETVALIDATIONSTATE  <任务>  <文件索引>
      <文件索引> 从0开始计数
    获取任务内指定文件的内容验证状态。
/GETTEMPORARYNAME  <任务>  <文件索引>
      <文件索引> 从0开始计数
    获取任务内指定文件的临时缓存文件名。

以下参数用于控制单个任务的对等缓存:
/SETPEERCACHINGFLAGS  <任务> <数值>
    设置任务对等缓存行为标志。
    值为无符号整数,二进制位定义:
        允许从此对等节点下载本任务数据 : 最低位置1
        允许将本任务数据提供给其他对等节点        : 右数第2位置1
/GETPEERCACHINGFLAGS  <任务>
    获取任务对等缓存标志。

以下命令仅适用于 UPLOAD-REPLY(上传并接收应答)类型任务:
/GETREPLYFILENAME <任务>        获取存放服务器应答内容的文件路径
/SETREPLYFILENAME <任务> <路径> 设置存放服务器应答内容的文件路径
/GETREPLYPROGRESS <任务>        获取服务器应答文件大小与传输进度
/GETREPLYDATA     <任务>        以十六进制导出服务器应答原始数据

/SETHELPERTOKEN <任务>          将当前命令提示符主令牌设为任务辅助令牌
/GETHELPERTOKENSID <任务>       获取任务辅助令牌对应的用户SID(如有)
/SETHELPERTOKENFLAGS <任务> <标志>
    设置任务辅助令牌使用标志,可选值:
        1 - 访问本地文件系统时使用辅助令牌。
        2 - 访问网络资源时使用辅助令牌。
        3 - 访问本地文件系统和网络都使用辅助令牌。
/GETHELPERTOKENFLAGS <任务>
    获取任务辅助令牌使用标志。

/GETPEERSTATS <任务> <文件索引>
    <文件索引> 从0开始计数
    获取任务内指定文件:从对等节点、源服务器下载的数据量统计。

可放在命令前面的全局选项:
/RAWRETURN                     返回便于程序解析的原始数据
/WRAP                          控制台自动换行输出(默认)
/NOWRAP                        控制台输出不自动换行

/RAWRETURN 会移除换行与格式化。
/CREATE 和所有 /GET* 命令支持该参数。

带 <任务> 参数的命令,既可以填写任务名称,也可以填写大括号包裹的任务GUID。
如果任务名称存在重名歧义,BITSADMIN 将返回报错。

bitsadmin.exe (BITSADMIN) 完整解构拆解

分析框架:底层原理|依赖文件|依赖关系|配套链|逻辑链路|边界 BITS:Background Intelligent Transfer Service,后台智能传输服务,bitsadmin.exe 是 BITS 服务的命令行管理工具,截图为 bitsadmin /? 完整帮助输出。

一、底层原理

BITS 是 Windows 系统自带后台异步文件传输组件,专门用于后台下载 / 上传,区别于 wget/curl 同步立即传输。

  1. 核心特性:带宽节流、感知网络状态、断点续传、后台优先级、会话持久化。
  2. 传输作业 (job) 存储在系统 BITS 数据库,脱离 bitsadmin.exe 进程独立运行;bitsadmin.exe 仅仅是命令行控制客户端,真正的传输工作由系统服务完成。
  3. 传输协议:支持 HTTP/HTTPS、SMB UNC 共享路径;支持下载 DOWNLOAD、上传 UPLOAD、上传‑应答 UPLOAD‑REPLY 三类 Job 类型。
  4. 带宽策略:自动避让前台应用带宽,空闲时跑满,前台程序占用带宽自动降速。
  5. 持久化:Job 写入 BITS 内部数据库,重启电脑依然保留任务,不会随命令行窗口关闭消失。

二、依赖文件

组件 文件路径 角色
bitsadmin.exe C:\Windows\System32\bitsadmin.exe 命令行 CLI 工具,仅做指令下发,不执行实际网络 IO
Qmgr.dll C:\Windows\System32\qmgr.dll BITS 核心 COM 组件,BITS 服务宿主逻辑
Qmgrprxy.dll C:\Windows\System32\qmgrprxy.dll BITS 代理 / 远程调用代理 COM
qmgr.exe BITS 服务进程,服务名:Background Intelligent Transfer Service (BITS) 系统服务可执行,真正执行下载上传 IO、网络、断点续传
BITS 数据库存储 %ProgramData%\Microsoft\Network\Downloader\qmgr*.dat BITS Job 持久化数据库,保存所有任务、分片、断点状态
winhttp.dll 系统 WinHTTP 栈 BITS 底层 HTTP 网络栈;不使用 WinInet
advapi32.dll、secur32.dll 系统安全组件 身份凭据、代理、认证 (Negotiate、NTLM、Basic、Digest)

三、依赖关系

  1. 系统服务依赖
    • 服务名称:BITS (Background Intelligent Transfer Service),启动类型默认:手动 (延迟启动)
    • BITS 依赖组件:COM+ 事件系统、RPC 远程过程调用;依赖 WinHTTP 网络栈。

    ⚠️关键点:bitsadmin.exe只是前端 CLI;如果 BITS 服务停止,bitsadmin 所有指令会报错,无法创建 / 操作 Job。

  2. 权限依赖
    • 普通用户:可以创建属于自己用户上下文的 BITS Job;只能管理自己名下任务。
    • 管理员:可以枚举、操作全部用户的 BITS 作业(/ALLUSERS参数)。
    • 服务会话 (系统账户) BITS 任务,普通用户无法查看。
  3. 网络依赖
    • HTTP 传输走 WinHTTP,复用系统代理配置(Internet 选项代理);支持配置 Job 独立代理 (/SETPROXYSETTINGS)。
  4. COM 接口 bitsadmin.exe 内部调用 IBackgroundCopyManager、IBackgroundCopyJob 等 BITS COM 接口,不是直接读写 qmgr.dat 数据库。

四、配套链

  1. 管理工具链
    • bitsadmin.exe:命令行 CLI(截图中的全部命令)
    • PowerShell BITS 模块:Start‑BitsTransfer、Get‑BitsJob,底层同样调用 BITS COM 接口,是 bitsadmin 的 PowerShell 封装。
    • 组策略:BITS 相关组策略,控制带宽节流、最大任务数量、代理行为、超时参数。
  2. 上层业务使用者
    • Windows Update:底层大量使用 BITS 下载更新包
    • Microsoft Store 应用更新
    • SCCM/MDM 企业终端管理
    • 部分安装程序、恶意软件也会滥用 BITS 做后台静默下载
  3. 配套配置项
    • Job 属性:优先级 (FOREGROUND/HIGH/NORMAL/LOW)、超时、重试延迟、通知命令行 (/SETNOTIFYCMDLINE),任务完成后可自动执行程序。
    • ACL 标志:/SETACLFLAGS控制下载完成文件继承的权限。
    • 凭据管理:/SETCREDENTIALS给 Job 附加服务器 / 代理认证账号密码。
    • 对等缓存 Peercaching:Windows 10+ BITS 支持对等缓存 (P2P 分发,截图中/PEERCACHING系列命令)。

五、完整逻辑链路(时序)

  1. 用户执行 bitsadmin /create myjob
  2. bitsadmin.exe 进程启动,加载 qmgrprxy.dll,RPC 调用 BITS 服务 (qmgr.exe) 的 COM 接口 IBackgroundCopyManager::CreateJob
  3. BITS 服务在内部数据库 qmgr*.dat 创建 Job 元数据;返回 Job GUID。此时没有发生任何网络传输。
  4. 用户执行bitsadmin /addfile 添加远程 URL 和本地输出路径。CLI 通过 COM 接口把 URL、本地路径写入 Job 对象。
  5. bitsadmin /resume myjob 恢复任务,BITS 服务内部调度器接管任务:
    1. 使用 WinHTTP 发起 HTTP 请求;分片下载;记录断点偏移到 qmgr*.dat 数据库。
    2. 自动检测网络断开、休眠、挂起,网络恢复自动续传。
    3. 根据系统前台负载动态调节带宽。
  6. 任务全部分片下载完成:进入 TRANSFERRED 状态;需要手动执行bitsadmin /complete完成 Job,才会把临时文件重命名为最终目标文件。

    重要:不执行 complete,文件仍然是临时后缀,无法正常使用!

  7. 如果配置SETNOTIFYCMDLINE,Job 完成后 BITS 服务进程会触发执行指定外部程序。
  8. bitsadmin /list /allusers 通过 COM 枚举数据库中全部 Job 信息展示到控制台。
  9. 关闭 bitsadmin.exe 进程,BITS 服务继续后台跑任务,进程退出不影响下载。

典型完整示例

bitsadmin /create mydownload
bitsadmin /addfile mydownload https://xxx/file.exe D:\test\file.exe
bitsadmin /resume mydownload
::等待完成
bitsadmin /complete mydownload

六、边界、限制、坑点

  1. 进程生命周期边界 bitsadmin.exe 只是控制器;关闭 CMD/PowerShell 窗口,Job 还在 BITS 服务内继续跑。反之:停止 BITS 服务,所有任务暂停,重启服务会自动恢复。
  2. 必须 complete 才生成正式文件 传输状态 TRANSFERRED 只是分片全部拉取完毕;没有 complete,输出目录只有 BITS 临时文件,不会生成目标文件名。很多使用者踩坑。
  3. 身份会话边界
  • 交互式用户创建 Job:在该用户登录会话运行;用户注销后 BITS 会暂停该用户任务。
  • 系统账户 (LocalSystem) 创建 Job,注销不受影响。
  • 普通用户默认只能看到自己的 Job,需要管理员加/ALLUSERS查看全部用户任务。
  1. 协议边界 ✅支持 HTTP / HTTPS;✅SMB UNC 路径; ❌不支持 FTP;❌不支持自定义 TCP 协议;HTTP 底层使用 WinHTTP,不是 curl/wininet。
  2. 代理边界 每个 BITS Job 可以独立代理配置,会覆盖系统全局代理;BITS 对 SOCKS 代理支持很差,仅支持 HTTP 代理。
  3. 上传模式限制UPLOAD:只能本地上传至 HTTP 服务器;UPLOAD‑REPLY上传后接收服务器返回内容;BITS 上传不支持 SMB 上传,上传只能走 HTTP。
  4. P2P 对等缓存 Peercaching Windows10/11 新增;需要组策略开启;企业分发场景使用;家庭版默认关闭。
  5. 安全边界
  • BITS Job 可以设置NotifyCmdLine,任务完成自动执行任意程序;该特性经常被恶意程序滥用做持久化、下载载荷。
  • 凭据SetCredentials存储于 BITS 作业内部,存在凭据泄露风险。
  • BITS 任务数据库 qmgr*.dat 包含 URL、本地路径、作业元数据,可用于取证分析。
  1. 超时重试边界 可配置 SETNOPROGRESSTIMEOUT、SETRETRYDELAY;网络失败自动重试,不是立刻报错。
  2. 32/64 位 WOW64 重定向边界 在 32 位进程调用 bitsadmin,会被 WOW64 重定向;操作的 Job 仍然是系统全局 BITS 任务,不受 WOW64 隔离。

补充:bitsadmin vs Start‑BitsTransfer (PowerShell)

  • bitsadmin.exe:老旧兼容 CLI 工具;脚本批处理 (.bat) 常用。
  • Start‑BitsTransfer:PowerShell 封装,底层调用完全同一套 BITS COM;功能等价,更适合 ps1 脚本。

两者全部依赖 BITS 系统服务,没有独立实现传输逻辑。


在 Windows 操作系统中通过命令行下载文件的各种方法与工具。以下从逻辑结构、技术深度、实用价值和潜在改进点四个维度进行分析:

一、逻辑结构分析(组织合理性)

✅ 优点:层次清晰,由简到繁

文档采用“原生工具 → 第三方工具 → 高级技巧 → 自动化扩展”的递进逻辑:

  1. 优先使用系统内置能力(PowerShell、bitsadmin、certutil)——无需安装,安全可靠;
  2. 引入经典 Unix 工具(curl/wget)——满足习惯 Linux 的用户;
  3. 拓展现代高效工具(aria2、yt-dlp)——支持多线程、断点续传;
  4. 延伸至自动化与运维场景(任务计划、校验、解压、备份)——贴近真实工作流。

这种结构符合用户认知路径:“先用现成的,再装更好的,最后自动化”。

⚠️ 可优化点:分类略有重叠

  • 例如 Invoke-WebRequest 与 WebClient、HttpClient 在 PowerShell 章节重复出现;
  • bitsadmin 与 Start-BitsTransfer 本质同源(BITS 服务),可合并说明。

建议按 “工具类型”而非“命令形式” 重新归类(如:PowerShell 原生命令、Windows 内置 CLI 工具、第三方下载器)。


二、技术深度分析(准确性 & 全面性)

✅ 覆盖全面,细节丰富

  • 工具覆盖面广:从 certutil(证书工具“跨界”下载)到 aria2(多协议并发下载),甚至包含 http(Windows 10 新增实验性工具);
  • 参数解释到位:如 bitsadmin /transfer 各选项含义、aria2c -x/-s 并发机制;
  • 场景考虑周全:认证下载、重定向处理、大文件续传、哈希校验、FTP/SFTP、代理设置等均有涉及。

✅ 强调安全与可靠性

  • 提醒 wget/curl 命令行暴露密码的风险;
  • 推荐使用 Get-FileHash 校验完整性;
  • 指出 bitsadmin 已被标记为过时(但可用)。

⚠️ 个别技术细节可更新

内容 建议修正/补充
“Windows 10 提供 http 命令行工具” 实际应为 winget 或误记;Windows 并未内置名为 http 的官方下载工具(可能混淆了第三方工具如 HTTPie)。
certutil -urlcache 行为 该命令会缓存文件到系统目录(如 %USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache),并非直接保存到指定路径,可能造成误解。
WSL 部分 可补充 WSL2 与 Windows 文件系统互操作性能差异(建议下载到 /mnt/c/ 而非 Linux 子系统内以避免 I/O 瓶颈)。

三、实用价值评估

✅ 极强的实战指导意义

  • 对无图形界面环境(如 Server Core、远程桌面受限)的运维人员极为有用;
  • 提供多种备选方案:当一种工具被禁用(如 PowerShell 被策略限制),仍有 certutil、bitsadmin 等“逃生通道”;
  • 包含批量下载、定时任务、自动解压等脚本范例,可直接用于生产环境。

✅ 兼顾初学者与高级用户

  • 初学者:复制粘贴 Invoke-WebRequest 即可下载;
  • 高级用户:利用 aria2 多线程、BITS 后台低优先级传输优化带宽。

四、潜在改进方向

  1. 增加对比
    将各工具按 速度、功能、安全性、是否需安装、是否支持断点续传 等维度横向对比,便于快速选型。

  2. 标注适用 Windows 版本
    例如:

    • curl:Windows 10 17064+ 内置;
    • Start-BitsTransfer:需 PowerShell 2.0+(Win7 SP1 起);
    • certutil:所有现代 Windows 均有。
  3. 补充错误处理示例
    如 PowerShell 中 try/catch 捕获下载失败,或 aria2c 的退出码判断。

  4. 安全最佳实践强化

    • 避免在命令行明文写密码(建议用 SecureString 或凭证管理器);
    • 下载后验证数字签名(而不仅是哈希)。

总结

一份高质量、高实用性的技术备忘录,逻辑主线清晰,技术覆盖全面,尤其适合系统管理员、DevOps 工程师和渗透测试人员(后者常利用 certutil/bitsadmin 绕过白名单)。

定位:不是理论教程,而是 “开箱即用”的命令行下载工具箱。
推荐使用方式:作为本地参考手册,在需要时快速查找对应场景的命令模板。

 


在 Windows 操作系统中,默认情况下并没有内置 curl 或 wget 命令行工具,但你仍然可以通过其他方法使用命令行下载文件。以下是一些可行的替代方案:

1. 使用 PowerShell 下载文件

Windows 提供了 PowerShell,它内置了一个非常强大的 Invoke-WebRequest 命令,可以用来下载文件。下面是如何通过 PowerShell 使用该命令下载文件。

打开 命令提示符(CMD) 或 PowerShell,输入以下命令:

powershellCopy Code
powershell -Command "Invoke-WebRequest -Uri 'http://example.com/file.zip' -OutFile 'C:\path\to\save\file.zip'"

其中:

  • 'http://example.com/file.zip' 是你要下载的文件 URL。
  • 'C:\path\to\save\file.zip' 是你希望保存文件的路径。

2. 使用 bitsadmin 下载文件

bitsadmin 是一个内置的命令行工具,虽然在新版 Windows 中它被标记为过时,但在大多数 Windows 版本中仍然可用。bitsadmin 可以用于后台下载文件。

下面是一个示例命令:

cmdCopy Code
bitsadmin /transfer myDownloadJob /download /priority high http://example.com/file.zip C:\path\to\save\file.zip

其中:

  • /transfer myDownloadJob 创建一个传输作业。
  • /download 表示下载操作。
  • /priority high 设置下载优先级。
  • http://example.com/file.zip 是文件的 URL。
  • C:\path\to\save\file.zip 是保存文件的路径。

请注意,bitsadmin 在较新的 Windows 版本中可能已经被弃用,但它仍然能在许多旧版本的 Windows 中使用。

PixPin_2026-07-12_14-08-22

bitsadmin 工具完整解析(基于截图帮助文档)

一、基础概述

1. 全称与定位

bitsadmin = Background Intelligent Transfer Service Administrator
 
中文:后台智能传输服务命令行管理工具,版本 3.0,微软内置在 C:\Windows\System32\bitsadmin.exe。
 
底层依托 BITS(后台智能传输服务),专门用于后台断点续传文件,支持 HTTP/HTTPS/UNC/ 本地文件协议,是 Windows 内网渗透、横向移动、持久化、文件外带的高频工具。

2. 核心特性(区别 curl/Invoke-WebRequest)

  1. 断点续传:网络中断、重启系统后自动恢复传输;
  2. 后台低带宽:不抢占业务流量,空闲时传输;
  3. 持久化任务:任务保存在 BITS 服务,可设置完成后执行程序(后门常用);
  4. 支持代理、自定义 HTTP 头、客户端证书、ACL 权限隔离;
  5. 支持上传 / 下载,可配置通知脚本,任务完成自动运行指定 exe。

二、全局前置参数(截图顶部 /RAWRETURN/WRAP /NOWRAP)

参数 作用 适用场景
/RAWRETURN 去除换行、格式化输出,原始结构化数据,便于脚本解析 批量自动化、EDR 日志采集
/WRAP 控制台自动换行输出(默认开启) 人工查看任务详情
/NOWRAP 禁止自动换行,长 URL / 路径单行展示 批量导出任务 URL
规则:全局参数必须写在子命令(create/transfer 等)最前面,如 bitsadmin /RAWRETURN /LIST。

三、核心命令分类拆解(按截图帮助文档分组)

1. 基础辅助类

  • /HELP /?:打印完整帮助文档(截图当前执行的命令)
  • /UTIL /?:打印 BITS 配套工具集说明
  • /PEERCACHING /?:对等缓存(P2P 内网分发文件)命令集
  • /PEERS /?:对等节点管理命令

2. 任务生命周期管理(最常用)

  1. /LIST [/ALLUSERS] [/VERBOSE]
     
    枚举本机所有 BITS 传输任务;/ALLUSERS 查看全用户任务(含其他用户 / 系统后台任务),渗透时可发现管理员遗留下载、后门任务。
  2. /MONITOR [/REFRESH sec]
     
    实时监控任务进度,按秒刷新。
  3. /RESET [/ALLUSERS]
     
    清空本机全部 BITS 任务,清理渗透痕迹。
  4. /CREATE <JobName> [DOWNLOAD/UPLOAD/UPLOAD-REPLY]
     
    创建传输任务,默认下载;仅支持任务名,不可直接填 GUID。
  5. /TRANSFER <job> [type] [/PRIORITY] 远程 URL 本地路径
     
    一键创建 + 添加文件 + 启动任务,简化操作,渗透快速下载恶意程序。
  6. /ADDFILE <job> 远程 URL 本地文件
     
    向已有任务添加单文件;支持多 URL 批量添加。
  7. /ADDSET <job> 文本文件
     
    文本内批量写入「远程地址 本地路径」,批量添加传输文件。
  8. /SUSPEND /RESUME /CANCEL /COMPLETE <job>
     
    暂停、恢复、取消、完成任务;/COMPLETE 必须执行才会落地本地文件,任务完成后可触发通知脚本。

3. 任务信息查询类(GET 系列)

批量读取任务元数据,溯源攻击行为:
  • /INFO <job>:完整打印任务 URL、本地路径、大小、进度、创建时间、代理配置
  • /GETBYTESTOTAL /GETBYTESTRANSFERRED:文件总大小、已传输字节
  • /GETFILESTOTAL /GETFILESTRANSFERRED:总文件数、已完成文件数
  • /GETCREATIONTIME /GETMODIFICATIONTIME /GETCOMPLETIONTIME:任务时间戳,取证关键
  • /GETPRIORITY /GETOWNER /GETDISPLAYNAME /GETDESCRIPTION:优先级、创建用户、任务展示名、描述
  • /GETPROXYUSAGE /GETPROXYLIST /GETPROXYBYPASSLIST:读取代理配置,内网漫游、绕过防火墙常用

4. 任务配置修改类(SET 系列,后门核心)

  1. /SETNOTIFYCMD <job> 程序 [参数]
     
    【高危渗透功能】任务传输完成后自动执行指定程序,可写入后门、反弹 Shell、读取 wbem/WMI 仓库文件。
     
    示例:bitsadmin /setnotifycmd backdoor C:\windows\system32\cmd.exe "/c whoami"
  2. /SETPRIORITY <job> PRIORITY`(FOREGROUND/HIGH/NORMAL/LOW)
     
    设置传输优先级,后台隐蔽传输用 LOW。
  3. /SETPROXYSETTINGS <job> PRECONFIG/AUTODETECT/NO_PROXY/OVERRIDE
     
    自定义代理,OVERRIDE 可指定代理 IP 与白名单。
  4. /SETCREDENTIALS <job> TARGET SCHEME USER PWD
     
    为 HTTP 目标附加基础认证凭据,批量爬内网 Web 管理面板(phpMyAdmin/WMI 5985)。
  5. /SETCUSTOMHEADERS /SETHttpMethod
     
    自定义 HTTP 请求头、请求方法(GET/POST),可构造 SSRF 请求对内网端口扫描。
  6. /SETSECURITYFLAGS <job> value
     
    控制 HTTPS 证书校验、302 重定向放行规则:
    • 可配置允许自动跟随跳转、忽略证书错误,用于 SSRF 链式 302 隐形重定向利用;
    • 位掩码控制:是否允许 HTTP→HTTPS 跳转、是否校验证书域名。
  7. /TAKEOWNERSHIP <job>
     
    夺取其他用户创建任务的控制权,横向移动接管管理员 BITS 任务。

5. 对等缓存(PeerCaching)内网 P2P 分发

/SETPEERCACHINGFLAGS 开启 / 关闭从内网对等节点下载文件,企业多终端批量分发工具、恶意载荷。

6. 上传专属参数(UPLOAD-REPLY 任务)

/GETREPLYFILENAME /SETREPLYFILENAME:读取 / 设置上传后服务器返回文件,用于内网数据外带,上传本地 wbem/evtx 日志到公网服务器。

四、底层工作原理

  1. 服务载体
     
    BITS 运行在独立 svchost 进程(svchost.exe -k bits),所有 bitsadmin 命令通过 RPC 调用 BITS 服务,任务持久化存储在系统注册表,重启不丢失。
  2. 传输底层逻辑
    • HTTP/HTTPS:基于 WinHTTP 网络栈,支持 301/302 自动跳转(可通过/SETSECURITYFLAGS控制隐形重定向);
    • UNC 路径:内网 SMB 共享文件传输;
    • 内置带宽节流,仅系统空闲时分片传输,断点记录保存在系统目录。
  3. 持久化后门底层逻辑
     
    创建下载任务 → 配置/SETNOTIFYCMD执行恶意脚本 → 暂停任务,等待管理员登录 / 网络连通自动恢复传输 → 文件下载完成后自动执行后门,无弹窗隐蔽运行。
  4. 与隐形 / 隐藏重定向联动
     
    bitsadmin 发起 HTTP 请求时,会跟随 WinHTTP 底层 302 隐形重定向,可配合 SSRF 漏洞访问内网 WMI、Redis、数据库端口;同时支持读取C:\Windows\System32\wbem本地系统文件外带出网。

五、安全攻防关键场景

攻击侧利用

  1. 内网文件外带:下载本地 evtx 日志、WMI 仓库、数据库配置上传至公网 C2;
  2. SSRF 辅助利用:自定义 HTTP 头、允许跳转,构造多层 302 隐形重定向扫描内网端口;
  3. 无文件持久化:BITS 后台任务 + notifycmd,无需写入启动项,EDR 传统启动项排查难以发现;
  4. 横向移动:夺取管理员 BITS 任务,利用域代理访问域控共享、Web 服务。

防御侧检测(结合 wevtutil)

  1. 使用 wevtutil qe Microsoft-Windows-Bits-Client/Operational 导出 BITS 操作日志;
  2. 监控异常/SETNOTIFYCMD配置、未知 URL 下载任务、低优先级后台批量传输;
  3. 组策略限制普通用户修改 BITS 通知命令、禁用对等缓存;
  4. Windows 企业版 Defender for Endpoint 监控 bitsadmin 创建任务、执行 notifycmd 行为告警。

六、截图关键示例摘录

文档内置使用示例:
cmd
# 设置ACL权限
bitsadmin /setaclflags MyJob OGD
# 自定义代理(多代理+空旁路列表)
bitsadmin /setproxysettings MyJob OVERRIDE proxy1 proxy2 proxy3 NULL
# 任务完成执行记事本
bitsadmin /setnotifycmd MyJob c:\winnt\system32\notepad.exe NULL
# 带参数执行回调程序
bitsadmin /setnotifycmd MyJob c:\callback.exe "callback.exe parm1 parm2"

BITSADMIN version 3.0
BITS administration utility.
(C) Copyright Microsoft Corp.

USAGE: BITSADMIN [/RAWRETURN] [/WRAP | /NOWRAP] command
The following commands are available:

/HELP           Prints this help
/?              Prints this help
/UTIL /?        Prints the list of utilities commands
/PEERCACHING /?   Prints the list of commands to manage Peercaching
/CACHE /?       Prints the list of cache management commands
/PEERS /?       Prints the list of peer management commands

/LIST    [/ALLUSERS] [/VERBOSE]     List the jobs
/MONITOR [/ALLUSERS] [/REFRESH sec] Monitors the copy manager
/RESET   [/ALLUSERS]                Deletes all jobs in the manager

/TRANSFER <job name> [type] [/PRIORITY priority] [/ACLFLAGS flags] [/DYNAMIC]
          remote_url local_name
    Transfers one of more files.
    [type] may be /DOWNLOAD or /UPLOAD; default is download
    Multiple URL/file pairs may be specified.
    Unlike most commands, <job name> may only be a name and not a GUID.
    /DYNAMIC configures the job with BITS_JOB_PROPERTY_DYNAMIC_CONTENT, which relaxes the server-side requirements.

/CREATE [type] <job name>               Creates a job
    [type] may be /DOWNLOAD, /UPLOAD, or /UPLOAD-REPLY; default is download
    Unlike most commands, <job name> may only be a name and not a GUID.

/INFO <job> [/VERBOSE]                   Displays information about the job
/ADDFILE <job> <remote_url> <local_name> Adds a file to the job
/ADDFILESET <job> <textfile>             Adds multiple files to the job
   Each line of <textfile> lists a file's remote name and local name, separated
   by spaces.  A line beginning with '#' is treated as a comment.
   Once the file set is read into memory, the contents are added to the job.

/ADDFILEWITHRANGES  <job> <remote_url> <local_name range_list>
   Like /ADDFILE, but BITS will read only selected byte ranges of the URL.
   range_list is a comma-delimited series of offset and length pairs.
   For example,

       0:100,2000:100,5000:eof

   instructs BITS to read 100 bytes starting at offset zero, 100 bytes starting
   at offset 2000, and the remainder of the URL starting at offset 5000.

/REPLACEREMOTEPREFIX <job> <old_prefix> <new_prefix>
    All files whose URL begins with <old_prefix> are changed to use <new_prefix>

Note that BITS currently supports HTTP/HTTPS downloads and uploads.
It also supports UNC paths and file:// paths as URLS

/LISTFILES <job>                     Lists the files in the job
/SUSPEND <job>                       Suspends the job
/RESUME <job>                        Resumes the job
/CANCEL <job>                        Cancels the job
/COMPLETE <job>                      Completes the job

/GETTYPE <job>                       Retrieves the job type
/GETACLFLAGS <job>                   Retrieves the ACL propagation flags

/SETACLFLAGS <job> <ACL_flags>       Sets the ACL propagation flags for the job
  O - OWNER       G - GROUP
  D - DACL        S - SACL

  Examples:
      bitsadmin /setaclflags MyJob OGDS
      bitsadmin /setaclflags MyJob OGD

/GETBYTESTOTAL <job>                 Retrieves the size of the job
/GETBYTESTRANSFERRED <job>           Retrieves the number of bytes transferred
/GETFILESTOTAL <job>                 Retrieves the number of files in the job
/GETFILESTRANSFERRED <job>           Retrieves the number of files transferred
/GETCREATIONTIME <job>               Retrieves the job creation time
/GETMODIFICATIONTIME <job>           Retrieves the job modification time
/GETCOMPLETIONTIME <job>             Retrieves the job completion time
/GETSTATE <job>                      Retrieves the job state
/GETERROR <job>                      Retrieves detailed error information
/GETOWNER <job>                      Retrieves the job owner
/GETDISPLAYNAME <job>                Retrieves the job display name
/SETDISPLAYNAME <job> <display_name> Sets the job display name
/GETDESCRIPTION <job>                Retrieves the job description
/SETDESCRIPTION <job> <description>  Sets the job description
/GETPRIORITY    <job>                Retrieves the job priority
/SETPRIORITY    <job> <priority>     Sets the job priority
   Priority usage choices:
      FOREGROUND
      HIGH
      NORMAL
      LOW
/GETNOTIFYFLAGS <job>                 Retrieves the notify flags
/SETNOTIFYFLAGS <job> <notify_flags>  Sets the notify flags
    For more help on this option, please refer to the MSDN help page for SetNotifyFlags/GETNOTIFYINTERFACE <job>             Determines if notify interface is registered
/GETMINRETRYDELAY <job>               Retrieves the retry delay in seconds
/SETMINRETRYDELAY <job> <retry_delay> Sets the retry delay in seconds
/GETNOPROGRESSTIMEOUT <job>           Retrieves the no progress timeout in seconds
/SETNOPROGRESSTIMEOUT <job> <timeout> Sets the no progress timeout in seconds
/GETMAXDOWNLOADTIME <job>             Retrieves the download timeout in seconds
/SETMAXDOWNLOADTIME <job> <timeout>   Sets the download timeout in seconds
/GETERRORCOUNT <job>                  Retrieves an error count for the job

/SETPROXYSETTINGS <job> <usage>      Sets the proxy usage
   usage choices:
    PRECONFIG   - Use the owner's default Internet settings.
    AUTODETECT  - Force autodetection of proxy.
    NO_PROXY    - Do not use a proxy server.
    OVERRIDE    - Use an explicit proxy list and bypass list.
                  Must be followed by a proxy list and a proxy bypass list.
                  NULL or "" may be used for an empty proxy bypass list.
  Examples:
      bitsadmin /setproxysettings MyJob PRECONFIG
      bitsadmin /setproxysettings MyJob AUTODETECT
      bitsadmin /setproxysettings MyJob NO_PROXY
      bitsadmin /setproxysettings MyJob OVERRIDE proxy1:80 "<local>"
      bitsadmin /setproxysettings MyJob OVERRIDE proxy1,proxy2,proxy3 NULL

/GETPROXYUSAGE <job>                 Retrieves the proxy usage setting
/GETPROXYLIST <job>                  Retrieves the proxy list
/GETPROXYBYPASSLIST <job>            Retrieves the proxy bypass list

/TAKEOWNERSHIP <job>                 Take ownership of the job

/SETNOTIFYCMDLINE <job> <program_name> [program_parameters]
    Sets a program to execute for notification, and optionally parameters.
    The program name and parameters can be NULL.
    IMPORTANT: if parameters are non-NULL, then the program name should be the
               first parameter.

  Examples:
    bitsadmin /SetNotifyCmdLine MyJob c:\winnt\system32\notepad.exe  NULL
    bitsadmin /SetNotifyCmdLine MyJob c:\callback.exe "c:\callback.exe parm1 parm2"
    bitsadmin /SetNotifyCmdLine MyJob NULL NULL

/GETNOTIFYCMDLINE <job>              Returns the job's notification command line

/SETCREDENTIALS <job> <target> <scheme> <username> <password>
  Adds credentials to a job.
  <target> may be either SERVER or PROXY
  <scheme> may be BASIC, DIGEST, NTLM, NEGOTIATE, or PASSPORT.

/REMOVECREDENTIALS <job> <target> <scheme>
  Removes credentials from a job.
/GETCUSTOMHEADERS <job>                           Gets the Custom HTTP Headers
/SETCUSTOMHEADERS <job> <header1> <header2> <...> Sets the Custom HTTP Headers
/MAKECUSTOMHEADERSWRITEONLY <job>                 Make a job's Custom HTTP Headers write-only (cannot be undone).

/GETHTTPMETHOD <job>                           Gets the HTTP verb to use.
/SETHTTPMETHOD <job> <HTTPMethod>              Sets the HTTP verb to use.

/GETCLIENTCERTIFICATE <job>                       Gets the job's Client Certificate Information
/SETCLIENTCERTIFICATEBYID <job> <store_location> <store_name> <hexa-decimal_cert_id>
  Sets a client authentication certificate to a job.
  <store_location> may be
        1(CURRENT_USER), 2(LOCAL_MACHINE), 3(CURRENT_SERVICE),
        4(SERVICES), 5(USERS), 6(CURRENT_USER_GROUP_POLICY),
        7(LOCAL_MACHINE_GROUP_POLICY) or 8(LOCAL_MACHINE_ENTERPRISE).

/SETCLIENTCERTIFICATEBYNAME <job> <store_location> <store_name> <subject_name>
  Sets a client authentication certificate to a job.
  <store_location> may be
        1(CURRENT_USER), 2(LOCAL_MACHINE), 3(CURRENT_SERVICE),
        4(SERVICES), 5(USERS), 6(CURRENT_USER_GROUP_POLICY),
        7(LOCAL_MACHINE_GROUP_POLICY) or 8(LOCAL_MACHINE_ENTERPRISE).

/REMOVECLIENTCERTIFICATE <job>                Removes the Client Certificate Information from the job

/SETSECURITYFLAGS <job> <value>
   Sets the HTTP security flags for URL redirection and checks performed on the server certificate during the transfer.
   The value is an unsigned integer with the following interpretation for the bits in the binary representation.
     Enable CRL Check                                 : Set the least significant bit
     Ignore invalid common name in server certificate : Set the 2nd bit from right
     Ignore invalid date in  server certificate       : Set the 3rd bit from right
     Ignore invalid certificate authority in server
       certificate                                    : Set the 4th bit from right
     Ignore invalid usage of certificate              : Set the 5th bit from right
     Redirection policy                               : Controlled by the 9th-11th bits from right
         0,0,0  - Redirects will be automatically allowed.
         0,0,1  - Remote name in the IBackgroundCopyFile interface will be updated if a redirect occurs.
         0,1,0  - BITS will fail the job if a redirect occurs.

     Allow redirection from HTTPS to HTTP             : Set the 12th bit from right

/GETSECURITYFLAGS <job>
   Reports the HTTP security flags for URL redirection and checks performed on the server certificate during the transfer.

/SETVALIDATIONSTATE  <job>  <file-index> <true|false>
      <file-index> starts from 0
    Sets the content-validation state of the given file within the job.

/GETVALIDATIONSTATE  <job>  <file-index>
      <file-index> starts from 0
    Reports the content-validation state of the given file within the job.

/GETTEMPORARYNAME  <job>  <file-index>
      <file-index> starts from 0
    Reports the temporary filename of the given file within the job.

The following options control peercaching of a particular job:

/SETPEERCACHINGFLAGS  <job> <value>
    Sets the flags for the job's peercaching behavior.
    The value is an unsigned integer with the following interpretation for the bits in the binary representation.
        Allow the job's data to be downloaded from a peer : Set the least significant bit
        Allow the job's data to be served to peers        : Set the 2nd bit from right

/GETPEERCACHINGFLAGS  <job>
    Reports the flags for the job's peercaching behavior.

The following options are valid for UPLOAD-REPLY jobs only:

/GETREPLYFILENAME <job>        Gets the path of the file containing the server reply
/SETREPLYFILENAME <job> <path> Sets the path of the file containing the server reply
/GETREPLYPROGRESS <job>        Gets the size and progress of the server reply
/GETREPLYDATA     <job>        Dumps the server's reply data in hex format

/SETHELPERTOKEN <job>          Sets the current command prompt's primary token as a job's helper token
/GETHELPERTOKENSID <job>       Reports the user account SID of a job's helper token, if one is set

/SETHELPERTOKENFLAGS <job> <flags>
    Sets the helper token usage flags for a job. Possible values are:
        1 - The helper token is used when accessing the local filesystem.
        2 - The helper token is used when accessing the network.
        3 - The helper token is used when accessing both the local filesystem and the network.

/GETHELPERTOKENFLAGS <job>
    Reports a job's helper token usage flags.

/GETPEERSTATS <job> <file-index>
    <file-index> starts from 0
    Reports statistics about the amount of data downloaded from peers and origin servers for a specific file within a job.

The following options can be placed before the command:
/RAWRETURN                     Return data more suitable for parsing
/WRAP                          Wrap output around console (default)
/NOWRAP                        Don't wrap output around console

The /RAWRETURN option strips new line characters and formatting.
It is recognized by the /CREATE and /GET* commands.

Commands that take a <job> parameter will accept either a job name or a job ID
GUID inside braces.  BITSADMIN reports an error if a name is ambiguous.

bitsadmin 是 Windows 中用于管理后台智能传输服务(BITS)的命令行工具。BITS 是一个 Windows 服务,允许你在后台传输文件。以下是 bitsadmin 命令常用选项按功能分类的:

功能分类 命令选项 描述
作业管理 create 创建一个新的 BITS 作业。
  list 列出所有作业,或者列出指定作业的详细信息。
  start 启动指定的 BITS 作业。
  pause 暂停指定的 BITS 作业。
  resume 恢复指定的 BITS 作业。
  cancel 取消指定的 BITS 作业。
  complete 标记作业为完成。
  set 设置作业的属性。
作业状态与进度 status 显示作业的状态和进度信息。
下载和上传管理 addfile 向作业中添加一个文件,指定源文件和目标路径。
  addurl 向作业中添加一个 URL 下载任务。
作业过滤和查询 query 查询作业的状态,通常用于过滤和查看特定条件下的作业。
作业属性管理 get 获取作业的详细属性。
文件管理 removefile 从作业中移除文件。
作业生命周期管理 abort 中止作业,不再执行。
安全与认证 setcredentials 设置作业使用的认证信息(用户名和密码)。
网络设置 setproxy 设置代理服务器,用于通过代理传输文件。
  settimeout 设置文件传输的超时时间。
调试与日志 setverbose 启用或禁用详细调试信息。
作业优先级管理 setpriority 设置作业的优先级,值为 low, normal, 或 high。
文件传输控制 setbandwidth 设置带宽限制,指定最大传输速率(单位:字节/秒)。
作业同步与完成 setcompleted 设置作业为完成状态。

示例命令

  1. 创建一个新的下载作业:

    cmdCopy Code
    bitsadmin /create MyJob
  2. 列出所有作业的状态:

    cmdCopy Code
    bitsadmin /list /all
  3. 向作业添加文件:

    cmdCopy Code
    bitsadmin /addfile MyJob "https://example.com/file.txt" "C:\path\to\destination\file.txt"
  4. 启动一个作业:

    cmdCopy Code
    bitsadmin /start MyJob
  5. 暂停一个作业:

    cmdCopy Code
    bitsadmin /pause MyJob
  6. 查询作业的状态:

    cmdCopy Code
    bitsadmin /status MyJob
  7. 设置作业的代理服务器:

    cmdCopy Code
    bitsadmin /setproxy MyJob "http://proxy.example.com:8080"
  8. 设置作业的优先级:

    cmdCopy Code
    bitsadmin /setpriority MyJob high
  9. 取消作业:

    cmdCopy Code
    bitsadmin /cancel MyJob
  10. 删除作业:

    cmdCopy Code
    bitsadmin /delete MyJob

 

bitsadmin 是一个功能强大的命令行工具,主要用于管理文件的后台传输作业。它可以处理各种文件传输操作,如创建、暂停、恢复作业,添加文件,设置代理和优先级等。通过这些命令,你可以轻松地管理下载和上传任务,特别适用于后台自动化任务。

3. 使用 certutil 下载文件

certutil 是一个 Windows 内置的工具,通常用于管理证书,但它也可以用于下载文件。

示例命令:

cmdCopy Code
certutil -urlcache -split -f http://example.com/file.zip C:\path\to\save\file.zip

其中:

  • http://example.com/file.zip 是你要下载的文件 URL。
  • C:\path\to\save\file.zip 是你希望保存文件的路径。

certutil 是一个比较简单的工具,但它也能很好地完成基本的文件下载任务。

PixPin_2026-07-12_14-09-58

certutil 工具完整解析(基于截图帮助文档)

一、基础定位与全称

certutil = Certificate Utility,Windows 内置证书管理命令行工具,路径 C:\Windows\System32\certutil.exe,底层依托 CryptoAPI、Active Directory 证书服务(AD CS),兼顾系统证书运维、编码转换、AD 证书服务器管理、取证、内网渗透四大场景,是安全运维与渗透高频工具。

核心能力总览

  1. 编码转换:Base64 / 十六进制 / ASN.1/PFX 解析、文件加解密哈希;
  2. 证书存储管理:本地 / 机器 / 用户证书仓库增删、验证、修复密钥关联;
  3. AD CS 域证书服务全生命周期管理(CA、证书申请、CRL、备份恢复);
  4. 密码学底层操作:ECC 曲线、证书签名验证、OCSP、SST 根证书同步;
  5. 注册表 / 系统配置读写、Hello 登录容器管理、智能卡证书管控。

二、核心命令分组拆解(对应截图动词列表)

1. 编码 / 文件解析组(渗透取证高频)

命令 功能说明 攻防场景
-dump 转储证书 / PFX / 配置文件完整明文结构 导出证书私钥、读取内网 Web 服务 HTTPS 证书信息
-dumpPFX 解析 PFX 证书包,提取证书 + 私钥 窃取域服务器 PFX,伪造身份访问 WMI / 内网 Web 面板
-asn 解析 ASN.1 二进制证书结构 分析恶意自签名证书、篡改证书签名
-decodehex 十六进制字符串还原为原始文件 还原日志中十六进制载荷、解密隐藏配置
-decode Base64 解码文件 解密 Web/SSRF 外带的 Base64 加密数据(evtx、wbem 仓库文件)
-encode 文件转为 Base64 编码 内网无文件上传时,分块 Base64 外带敏感文件
-hashfile 生成文件 SHA1/SHA256 哈希 取证校验文件完整性、识别恶意 MOF/WMI 脚本

2. AD CS 证书服务生命周期管理(域环境核心)

证书申请操作

  • -deny / -resubmit / -revoke:拒绝、重提交、吊销挂起证书申请;
  • -setattributes / -setextension:修改证书自定义属性、扩展字段(可注入恶意 OID);
  • -isvalid:校验当前证书部署状态;

CA 与 CRL 管理

  • -CAInfo:查看域证书服务器 CA 根信息;
  • -ca.cert / -ca.chain:获取 CA 根证书、完整证书链;
  • -GetCRL / -CRL:下载、发布证书吊销列表;
  • -shutdown:停止 AD 证书服务;
  • -installCert / -renewCert:安装、续期 CA 根证书;

备份与恢复(域控权限高危操作)

  • -backup / -backupDB / -backupKey:完整备份 CA 数据库、私钥;
  • -restore / -restoreDB / -restoreKey:恢复证书服务器私钥,可伪造域内任意设备证书;
  • -importPFX:向 CA 导入外部证书私钥;
  • -RecoverKey:恢复存档私钥,实现域身份伪造。

3. 本地证书存储管理(系统信任库)

  • -store:枚举系统 / 用户证书存储(Root、My、CA 仓库);
  • -enumstore:批量列出存储内所有证书;
  • -addstore / -delstore:添加 / 删除信任根证书;
  • -verifystore:校验仓库证书合法性;
  • -repairstore:修复证书与私钥关联漏洞(提权常用);
  • -SCRoots:批量管理智能卡根证书;

4. 密码学与证书校验工具

  • -verifykeys:校验公钥私钥配对完整性;
  • -verify / -verifyCTL:校验证书、证书信任列表 CTL;
  • -syncWithWU:从 Windows 更新同步官方根证书;
  • -generateSSTFromWU:生成系统根证书 SST 包;
  • -sign:使用本地私钥重新签名证书 / CRL;
  • ECC 系列:-addEccCurve/-deleteEccCurve 管理椭圆加密曲线;

5. AD 域信息与模板管理(企业运维)

  • -ADTemplate / -Template:查看 AD 证书注册模板(域内设备自动申请证书规则);
  • -enrollmentServerURL:管理 CA 注册服务地址,可新增恶意证书下发节点;
  • -MachineInfo / -DCInfo:读取域计算机、域控 AD 对象信息;
  • -pulse:自动执行证书注册任务,后台静默申请恶意证书;

6. 注册表 / 系统底层配置工具

  • -getreg / -setreg / -delreg:读取、新增、删除证书相关注册表项;
  • -flushcache:刷新 lsass.exe 证书缓存,立刻加载新增恶意根证书;
  • -DeleteHelloContainer:删除 Windows Hello 生物登录密钥容器;

7. 辅助底层工具

  • -UI:打开图形化 CryptUI 证书窗口;
  • -attest:验证密钥安全证明;
  • -vroot / -vocsproot:创建 OCSP、证书 Web 虚拟站点;
  • -ImportKMS:导入密钥存档服务私钥;

8. 帮助查询语法(截图底部)

cmd
certutil -?          # 输出全部动词列表(截图当前执行命令)
certutil -dump -?    # 单独查看dump子命令详细参数
certutil -v -?       # 输出所有命令完整详细帮助文档

三、底层工作原理

  1. API 依赖分层
     
    命令行输入 → crypt32.dll 证书 API → CryptoNG/CryptoAPI 密码学底层驱动 → 本地证书仓库(%SystemRoot%\System32\certstore)/ AD CS 域证书数据库;
  2. 证书存储持久化
    • 用户证书:注册表 HKCU\Software\Microsoft\SystemCertificates;
    • 机器全局证书:HKLM\Software\Microsoft\SystemCertificates,重启仍保留信任关系;
  3. AD CS 交互底层
     
    通过 LDAP/RPC 连接域控证书服务,所有 CA 备份、私钥恢复操作依赖域管理员权限,操作日志写入 Application 通道,可通过 wevtutil qe Application 审计溯源;
  4. 编码转换底层
     
    内置 ASN.1 DER 解析引擎,无需第三方工具,原生支持 Base64、十六进制、PFX 二进制解析,常被用于绕过 Web 上传 / 文件读取过滤(SSRF 读取文件后 Base64 外带)。

四、安全攻防核心场景

🔴 攻击侧利用方式

  1. 文件无痕迹外带
     
    内网存在 SSRF 漏洞时,certutil -encode 将 C:\Windows\System32\wbem\Repository、evtx 日志转为 Base64,分段通过 URL 参数带出公网;
  2. 域证书伪造
     
    获取域管理员权限后,certutil -backupKey 导出 CA 私钥,自签名伪造服务器证书,中间人拦截内网 WMI、数据库 HTTPS 流量;
  3. 持久化信任后门
     
    certutil -addstore Root 恶意根证书.cer,系统永久信任攻击者证书,内网中间人长期监听流量;配合 flushcache 立即生效,无需重启;
  4. 私钥提取提权
     
    -dumpPFX 解析服务器部署的 PFX 证书,提取明文私钥,横向登录内网 Web 管理面板、WMI 5985 加密接口;
  5. 绕过文件过滤
     
    Base64 解码功能绕过 Web 上传黑名单,将编码后的后门 MOF 脚本落地执行,植入 WMI 持久化订阅。

🟢 防御与审计手段

  1. 日志溯源
     
    使用 wevtutil qe Microsoft-Windows-CertificationAuthority/Operational 采集所有 certutil 证书操作日志,监控异常 PFX 导出、根证书新增、CA 私钥备份行为;
  2. 组策略管控
     
    限制普通用户执行 certutil -addstore、-backupKey,仅管理员可修改系统根证书仓库;
  3. EDR 监控规则
     
    Defender for Endpoint 告警特征:certutil -encode/-decode 读取系统敏感目录、批量添加根证书、导出 CA 私钥;
  4. 证书基线巡检
     
    定期 certutil -enumstore Root 遍历信任根证书,清理未知第三方证书,阻断中间人攻击链路。

五、与你之前学习工具的联动

  1. wevtutil:采集 certutil 证书操作审计日志,完整溯源证书伪造、文件外带行为;
  2. bitsadmin:certutil 编码后的 Base64 载荷,通过 BITS 后台任务静默上传至 C2 服务器;
  3. 隐形 / 隐藏重定向:配合 302 SSRF 跳转,certutil -decode 读取内网服务器本地证书文件;
  4. WMI 体系:提取的证书私钥用于加密 WMI 远程连接,绕过账号认证批量读取 wbem 资产库。

certutil /?

Verbs:
  -dump             -- Dump configuration information or file
  -dumpPFX          -- Dump PFX structure
  -asn              -- Parse ASN.1 file

  -decodehex        -- Decode hexadecimal-encoded file
  -decode           -- Decode Base64-encoded file
  -encode           -- Encode file to Base64

  -deny             -- Deny pending request
  -resubmit         -- Resubmit pending request
  -setattributes    -- Set attributes for pending request
  -setextension     -- Set extension for pending request
  -revoke           -- Revoke Certificate
  -isvalid          -- Display current certificate disposition

  -getconfig        -- Get default configuration string
  -ping             -- Ping Active Directory Certificate Services Request interface
  -pingadmin        -- Ping Active Directory Certificate Services Admin interface
  -CAInfo           -- Display CA Information
  -ca.cert          -- Retrieve the CA's certificate
  -ca.chain         -- Retrieve the CA's certificate chain
  -GetCRL           -- Get CRL
  -CRL              -- Publish new CRLs [or delta CRLs only]
  -shutdown         -- Shutdown Active Directory Certificate Services

  -installCert      -- Install Certification Authority certificate
  -renewCert        -- Renew Certification Authority certificate

  -schema           -- Dump Certificate Schema
  -view             -- Dump Certificate View
  -db               -- Dump Raw Database
  -deleterow        -- Delete server database row

  -backup           -- Backup Active Directory Certificate Services
  -backupDB         -- Backup Active Directory Certificate Services database
  -backupKey        -- Backup Active Directory Certificate Services certificate and private key
  -restore          -- Restore Active Directory Certificate Services
  -restoreDB        -- Restore Active Directory Certificate Services database
  -restoreKey       -- Restore Active Directory Certificate Services certificate and private key
  -importPFX        -- Import certificate and private key
  -dynamicfilelist  -- Display dynamic file List
  -databaselocations -- Display database locations
  -hashfile         -- Generate and display cryptographic hash over a file

  -store            -- Dump certificate store
  -enumstore        -- Enumerate certificate stores
  -addstore         -- Add certificate to store
  -delstore         -- Delete certificate from store
  -verifystore      -- Verify certificate in store
  -repairstore      -- Repair key association or update certificate properties or key security descriptor
  -viewstore        -- Dump certificate store
  -viewdelstore     -- Delete certificate from store
  -UI               -- invoke CryptUI
  -attest           -- Verify Key Attestation Request

  -dsPublish        -- Publish certificate or CRL to Active Directory

  -ADTemplate       -- Display AD templates
  -Template         -- Display Enrollment Policy templates
  -TemplateCAs      -- Display CAs for template
  -CATemplates      -- Display templates for CA
  -SetCASites       -- Manage Site Names for CAs
  -enrollmentServerURL -- Display, add or delete enrollment server URLs associated with a CA
  -ADCA             -- Display AD CAs
  -CA               -- Display Enrollment Policy CAs
  -Policy           -- Display Enrollment Policy
  -PolicyCache      -- Display or delete Enrollment Policy Cache entries
  -CredStore        -- Display, add or delete Credential Store entries
  -InstallDefaultTemplates -- Install default certificate templates
  -URLCache         -- Display or delete URL cache entries
  -pulse            -- Pulse autoenrollment event or NGC task
  -MachineInfo      -- Display Active Directory machine object information
  -DCInfo           -- Display domain controller information
  -EntInfo          -- Display enterprise information
  -TCAInfo          -- Display CA information
  -SCInfo           -- Display smart card information

  -SCRoots          -- Manage smart card root certificates

  -DeleteHelloContainer -- Delete Hello Logon container.
     ** Users need to sign out after using this option for it to complete. **
  -verifykeys       -- Verify public/private key set
  -verify           -- Verify certificate, CRL or chain
  -verifyCTL        -- Verify AuthRoot or Disallowed Certificates CTL
  -syncWithWU       -- Sync with Windows Update
  -generateSSTFromWU -- Generate SST from Windows Update
  -generatePinRulesCTL -- Generate Pin Rules CTL
  -downloadOcsp     -- Download OCSP Responses and Write to Directory
  -generateHpkpHeader -- Generate HPKP header using certificates in specified file or directory
  -flushCache       -- Flush specified caches in selected process, such as, lsass.exe
  -addEccCurve      -- Add ECC Curve
  -deleteEccCurve   -- Delete ECC Curve
  -displayEccCurve  -- Display ECC Curve
  -sign             -- Re-sign CRL or certificate

  -vroot            -- Create/delete web virtual roots and file shares
  -vocsproot        -- Create/delete web virtual roots for OCSP web proxy
  -addEnrollmentServer -- Add an Enrollment Server application
  -deleteEnrollmentServer -- Delete an Enrollment Server application
  -addPolicyServer  -- Add a Policy Server application
  -deletePolicyServer -- Delete a Policy Server application
  -oid              -- Display ObjectId or set display name
  -error            -- Display error code message text
  -getreg           -- Display registry value
  -setreg           -- Set registry value
  -delreg           -- Delete registry value

  -ImportKMS        -- Import user keys and certificates into server database for key archival
  -ImportCert       -- Import a certificate file into the database
  -GetKey           -- Retrieve archived private key recovery blob, generate a recovery script,
      or recover archived keys
  -RecoverKey       -- Recover archived private key
  -MergePFX         -- Merge PFX files
  -ConvertEPF       -- Convert PFX files to EPF file

  -add-chain        -- (-AddChain) Add certificate chain
  -add-pre-chain    -- (-AddPrechain) Add pre-certificate chain
  -get-sth          -- (-GetSTH) Get signed tree head
  -get-sth-consistency -- (-GetSTHConsistency) Get signed tree head changes
  -get-proof-by-hash -- (-GetProofByHash) Get proof by hash
  -get-entries      -- (-GetEntries) Get entries
  -get-roots        -- (-GetRoots) Get roots
  -get-entry-and-proof -- (-GetEntryAndProof) Get entry and proof
  -VerifyCT         -- Verify certificate SCT
  -?                -- Display this usage message


CertUtil -?              -- Display a verb list (command list)
CertUtil -dump -?        -- Display help text for the "dump" verb
CertUtil -v -?           -- Display all help text for all verbs

CertUtil: -? command completed successfully.

4. 手动安装 curl 或 wget

如果你需要使用 curl 或 wget 进行文件下载,并且希望它们在 CMD 中可用,你可以手动安装它们:

  • 安装 curl:

    1. 从 curl 官网 下载适合你 Windows 版本的 curl 可执行文件。
    2. 解压文件后,将 curl.exe 文件放到某个目录中,并将该目录添加到系统的 PATH 环境变量中,这样你就可以在任何命令行窗口中使用 curl 了。
  • 安装 wget:

    1. 从 wget for Windows 下载 Windows 版本的 wget。
    2. 将下载的 wget.exe 文件放到一个目录中,并将该目录添加到系统的 PATH 环境变量中。

安装完成后,你就可以像在 Linux 系统上一样使用 curl 或 wget 命令进行文件下载了。

wget 和 wget2 是用于从网络下载文件的命令行工具。虽然它们的功能相似,但 wget2 是 wget 的一个更新版本,具有一些改进和新特性。以下是它们之间的一些主要区别:

1. 性能和效率

  • wget: 传统的 wget 工具在处理大文件和高延迟网络时可能效率较低。
  • wget2: 设计时考虑了性能优化,支持更高效的下载,尤其是在高延迟或不稳定的网络环境下。

2. HTTP/2 支持

  • wget: 仅支持 HTTP/1.1。
  • wget2: 原生支持 HTTP/2 协议,允许更快的下载速度和更好的资源利用。

3. 多线程下载

  • wget: 不支持多线程下载,所有文件下载都是单线程的。
  • wget2: 支持多线程下载,可以同时下载多个文件,从而提高下载速度。

4. 更好的错误处理

  • wget: 错误处理相对简单,可能在某些情况下无法恢复下载。
  • wget2: 提供了更好的错误恢复机制,能够在网络中断后更有效地恢复下载。

5. 命令行选项和功能

  • wget: 拥有丰富的命令行选项,但某些功能可能不够灵活。
  • wget2: 在命令行选项上进行了改进,增加了一些新功能,使得使用更加灵活。

6. 依赖性

  • wget: 依赖于较少的外部库,通常在大多数 Linux 发行版中预装。
  • wget2: 可能依赖于更多的库,尤其是为了支持 HTTP/2 和多线程特性。

7. 开发和维护

  • wget: 仍在维护,但更新频率较低。
  • wget2: 是一个相对较新的项目,正在积极开发中,添加新特性和修复问题。

wget2 是 wget 的现代化版本,提供了更好的性能、更多的功能和对新技术的支持。如果您需要更高效的下载工具,尤其是在现代网络环境中,wget2 是一个更好的选择。对于简单的下载任务,wget 仍然是一个可靠的工具。

5. 使用 http 命令行工具(适用于 Windows 10 及更新版本)

在 Windows 10 及更新版本中,微软提供了一个名为 http 的命令行工具,它允许你发送 HTTP 请求。

示例命令:

cmdCopy Code
http --download http://example.com/file.zip

这个命令会将指定 URL 的文件下载到当前目录。

6. 使用 start 命令打开浏览器下载

如果你只是想通过浏览器下载文件,也可以通过 start 命令来在默认浏览器中打开下载链接:

cmdCopy Code
start http://example.com/file.zip

这会自动在你的默认浏览器中打开该 URL,然后你可以通过浏览器来手动下载文件。

 

如果没有 curl 或 wget,你可以使用 PowerShell 的 Invoke-WebRequest,bitsadmin,certutil 等工具下载文件。如果你习惯于使用这些工具,也可以手动安装 curl 或 wget 到你的系统中。这些方法可以满足大部分文件下载需求,尽管命令行的使用体验略有不同。


了解更多关于 Windows 下命令行下载文件的方法,下面是一些额外的技巧和注意事项。

7. 使用 Invoke-RestMethod(PowerShell)

除了 Invoke-WebRequest,PowerShell 还提供了 Invoke-RestMethod 命令,可以用于执行 HTTP 请求并处理响应数据。它非常适合处理 REST API 请求,或者下载文件。

示例命令:

powershellCopy Code
Invoke-RestMethod -Uri "http://example.com/file.zip" -OutFile "C:\path\to\save\file.zip"

与 Invoke-WebRequest 相似,它允许你下载文件并将其保存到指定路径。

8. 使用 wget 在 Windows 上的替代工具

如果你安装了 Windows Subsystem for Linux (WSL),那么你就可以直接在 Windows 上使用 Linux 版本的 wget 和 curl。WSL 是微软提供的一个功能,它允许你运行 Linux 发行版(例如 Ubuntu)作为子系统,提供了一些原生的 Linux 工具和命令行程序。

  1. 安装 WSL:

    • 打开 PowerShell 并以管理员身份运行:
      powershellCopy Code
      wsl --install
    • 安装完毕后,重启电脑并选择一个 Linux 发行版(如 Ubuntu)。
  2. 在 WSL 环境中,你可以直接使用 wget 或 curl:

    bashCopy Code
    wget http://example.com/file.zip -O /mnt/c/path/to/save/file.zip

    这个命令将从 http://example.com/file.zip 下载文件,并保存到 C:\path\to\save\file.zip。

9. 利用脚本自动化下载

如果你需要定期从某个 URL 下载文件,可以使用 PowerShell 或批处理脚本来自动化这个过程。例如,编写一个 PowerShell 脚本来定期下载文件:

powershellCopy Code
$url = "http://example.com/file.zip"
$outputPath = "C:\path\to\save\file.zip"
Invoke-WebRequest -Uri $url -OutFile $outputPath

保存为 download-file.ps1,然后你可以通过任务计划程序(Task Scheduler)定时执行这个脚本来实现定期下载。

10. 通过 FTP 下载文件

Windows 操作系统还内置了支持 FTP(文件传输协议)的功能。如果你需要从 FTP 服务器下载文件,可以使用 ftp 命令。

示例命令:

  1. 打开命令提示符(CMD)。

  2. 输入 ftp 并连接到 FTP 服务器:

    cmdCopy Code
    ftp ftp.example.com
  3. 登录后,你可以使用 get 命令下载文件:

    cmdCopy Code
    get /path/to/file.zip C:\path\to\save\file.zip
  4. 完成下载后,使用 bye 退出 FTP 会话。

如果你需要通过匿名访问 FTP,只需输入匿名用户和任意密码即可:

cmdCopy Code
ftp -n -s:ftp-commands.txt ftp.example.com

在 ftp-commands.txt 文件中包含以下命令:

txtCopy Code
user anonymous your-email@example.com
get /path/to/file.zip C:\path\to\save\file.zip
bye

11. 通过 curl 下载带认证的文件

如果你需要下载一个需要身份验证的文件,curl 和 Invoke-WebRequest 都支持 HTTP 基本认证或其他身份验证方法。例如,使用 curl 下载带有用户名和密码的文件:

cmdCopy Code
curl -u username:password -o C:\path\to\save\file.zip http://example.com/protectedfile.zip

对于 Invoke-WebRequest(PowerShell):

powershellCopy Code
$url = "http://example.com/protectedfile.zip"
$outputPath = "C:\path\to\save\file.zip"
$credential = New-Object System.Management.Automation.PSCredential ("username", (ConvertTo-SecureString "password" -AsPlainText -Force))
Invoke-WebRequest -Uri $url -OutFile $outputPath -Credential $credential

12. 使用 aria2 下载文件

aria2 是一个功能强大的多协议下载工具,支持 HTTP、HTTPS、FTP、BT 等协议。在 Windows 上,你可以通过下载安装 aria2 来使用它。

下载并安装 aria2 后,可以使用以下命令进行文件下载:

cmdCopy Code
aria2c -o C:\path\to\save\file.zip http://example.com/file.zip

aria2 支持下载加速,可以通过多线程下载文件,从而提高下载速度。

PixPin_2026-07-12_14-20-19

aria2c 1.37.0 帮助文档完整中文翻译

一、命令使用语法

plaintext
aria2c [选项] [URI|磁力链接|种子文件|Metalink文件]...
打印带有 #basic 标签的选项帮助信息:
plaintext
aria2c -h#basic
查看全部可用标签:
plaintext
aria2c --help

基础参数

-v, --version
 
打印版本号并退出
-h, --help[=标签|关键词]
 
打印帮助并退出。
 
帮助信息按标签分类,标签以 # 开头。
 
示例:--help#http 查看所有带#http标签的选项说明;
 
若不传入标签,打印所有帮助文本。
可用标签:
 
#basic(基础必用)、#advanced(高级)、#http、#https、#ftp、#metalink、#bittorrent、#cookie、#hook、#file、#rpc、#checksum、#experimental、#deprecated、#help
 
默认标签:#basic

二、基础文件下载通用选项(#basic / #file)

1. 日志相关

-l, --log=日志文件
 
指定日志保存文件;传入 - 则日志输出到标准输出。
 
示例值:D:/download/log.txt / -

2. 下载目录

-d, --dir=目录路径
 
设置文件保存目录
 
示例:C:/Users/Administrator/Downloads
 
默认:当前执行目录

3. 输出文件名

-o, --out=文件名
 
设置下载保存文件名,路径以 -d 指定目录为基准;
 
若同时使用 -Z(批量多文件),此参数会被忽略。
 
标签:#basic,#http,#ftp,#file

4. 分块多线程下载

-s, --split=N
 
使用 N 条连接下载单个文件。
 
若提供多个地址,前 N 个地址并行;地址总数不足 N 则循环复用地址,保证同时 N 条连接。
 
单服务器最大连接受 --max-connection-per-server 限制,可搭配 --min-split-size 使用。
 
取值:1~*
 
默认:5
 
标签:#basic,#http,#ftp

5. 文件预分配方式

--file-allocation=分配方式
 
可选值:none / prealloc / trunc / falloc
  • none:下载前不预占用磁盘空间,无 IO 损耗
  • prealloc:下载前完整预分配文件空间,大文件耗时久;NTFS、ext4 推荐
  • trunc:调用系统ftruncate快速占位,兼容性最好,老旧 FAT32 推荐
  • falloc:调用posix_fallocate快速分配,速度最快,老旧系统可能无此函数
     
    标签:#basic,#file

6. 文件完整性校验

-V, --check-integrity[=true|false]
 
通过分片哈希校验文件完整性,仅对 BitTorrent、Metalink、带校验和的 HTTP/FTP 生效。
 
开启后自动修复损坏分片;若文件完整仅校验一次,分片缺失则重新下载对应块。
 
取值:true /false
 
默认:false
 
标签:#basic,#metalink,#bittorrent,#file,#checksum

7. 断点续传

-c, --continue[=true|false]
 
续传未完成的半下载文件。传统浏览器是从头重下,aria2 支持断点恢复;仅支持 HTTP (S)/FTP。
 
取值:true /false
 
默认:false
 
标签:#basic,#http,#ftp

8. 批量读取下载地址文件

-i, --input-file=文件路径
 
从指定文件批量读取下载地址,一行一条地址;同文件多地址用制表符分隔。
 
每行可追加该行专属参数;传入 - 则从标准输入读取地址。
 
示例:urls.txt / -
 
标签:#basic

9. 全局最大并行下载任务数

-j, --max-concurrent-downloads=N
 
同时并行下载的静态任务上限(HTTP/FTP、种子、Metalink)。
 
搭配 --split、--optimize-concurrent-downloads 使用。
 
取值:1~*
 
默认:5
 
标签:#basic

10. 强制串行单任务下载

-Z, --force-sequential[=true|false]
 
按命令行传入顺序串行下载,每个地址独立会话,和传统单线程下载工具行为一致。
 
默认:false
 
标签:#basic

11. 单服务器最大连接数

-x, --max-connection-per-server=NUM
 
单个服务器最多同时建立连接数量。
 
取值:1~16
 
默认:1
 
标签:#basic,#http,#ftp

12. 最小分块大小

-k, --min-split-size=大小
 
文件小于该值时不进行分块多线程下载。
 
单位后缀:K=1024、M=1024K
 
示例:20M
 
默认:20M
 
规则:文件 ≥20M 才会切分多线程;小于阈值仅单线程下载
 
标签:#basic,#http,#ftp

三、FTP / HTTP 账号密码配置

FTP 账号

--ftp-user=用户名
 
全局 FTP 用户名,对所有 FTP 地址生效
 
标签:#basic,#ftp
--ftp-passwd=密码
 
全局 FTP 密码,对所有 FTP 地址生效
 
标签:#basic,#ftp

HTTP 基础认证

--http-user=用户名
 
全局 HTTP 账号,全部 HTTP/HTTPS 链接生效
 
标签:#basic,#http
--http-passwd=密码
 
全局 HTTP 密码,全部 HTTP/HTTPS 链接生效
 
标签:#basic,#http

Cookie 加载

--load-cookies=文件路径
 
从文件载入 Cookie,支持 Firefox3、Netscape 格式 Cookie 文件
 
标签:#basic,#http,#cookie

四、BT 下载通用选项(#bittorrent)

1. 打印种子文件内容

-S, --show-files[=true|false]
 
打印种子 /metalink 内文件列表、元数据、分片详情,方便查看文件结构。
 
默认:false
 
标签:#basic,#metalink,#bittorrent

2. 全局上传速度限制

--max-overall-upload-limit=速度
 
全局总上传限速,单位字节 / 秒;0 = 无限制。后缀 K/M。
 
默认:0
 
标签:#basic,#bittorrent

3. 单任务上传限速

-u, --max-upload-limit=速度
 
单一种子任务上传限速,单位字节 / 秒;0 = 不限速。
 
默认:0
 
标签:#basic,#bittorrent

4. 加载种子文件

-T, --torrent-file=种子路径
 
指定.torrent种子文件路径
 
标签:#basic,#bittorrent

5. BT 监听端口

--listen-port=端口
 
BTP2P 监听端口,多端口逗号分隔,区间用-;示例 6881,6885 / 6881-6999
 
取值:1024~65535
 
默认:6881-6999
 
标签:#basic,#bittorrent

6. IPv4 DHT 分布式网络

--enable-dht[=true|false]
 
开启 IPv4 DHT 无 Tracker 网络;私有种子会自动禁用 DHT。
 
默认:true
 
标签:#basic,#bittorrent

7. DHT UDP 监听端口

--dht-listen-port=端口
 
DHT (UDP) 监听端口,格式同 BT 监听端口
 
默认:6881-6999
 
标签:#basic,#bittorrent

8. IPv6 DHT 开关

--enable-dht6[=true|false]
 
开启 IPv6 DHT 网络,配套--dht-listen-port、--dht-listen-addr6
 
默认:false
 
标签:#basic,#bittorrent

9. DHT IPv6 绑定地址

--dht-listen-addr6=IPv6地址
 
绑定 DHT IPv6 套接字地址,必须为本机公网唯一 IPv6 地址
 
标签:#basic,#bittorrent

五、Metalink 下载配置(#metalink)

-M, --metalink-file=Metalink文件
 
指定.meta4/.metalink文件路径;传入 - 从标准输入读取
 
标签:#basic,#metalink

六、多地址 / 混合下载说明

  1. 可同时传入 HTTP/FTP 地址、磁力链接、种子、Metalink 文件;
     
    不加 -Z 时,多地址指向同一个文件才会合并分块下载,否则下载失败。
  2. 可混合同时下载 BT 任务与 HTTP 任务,文件会保存至同目录;单任务仅占用设定的单连接上限。
  3. 磁力链接、种子文件始终作为独立下载任务处理。
  4. 地址含空格、特殊 shell 符号时,必须用单 / 双引号包裹。

连接数补充说明

  1. 1.10 版本起,单服务器默认 1 连接,最小分块 20M;文件小于 20M 不会多线程切分。
  2. 旧版本默认单服务器 4 连接,如需兼容旧行为:
    plaintext
    aria2c -x4 -k1M

七、程序版权与编译信息

版权声明

aria2 版本 1.37.0
 
版权所有 (C) 2006, 2019 Tatsuhiro Tsujikawa
 
本程序为自由软件,遵循 GNU 通用公共许可证第 2 版(或后续自选版本)开源分发。
 
无任何质保,不保证商用、特定用途适配性,详见许可证原文。

启用功能列表

异步 DNS、BitTorrent、Firefox3 Cookie、GZip、HTTPS、消息摘要、Metalink、XML-RPC、SFTP
 
哈希算法:sha-1、sha-224、sha-256、sha-384、sha-512、md5、adler32

依赖库版本

zlib 1.3、expat 2.5.0、sqlite3 4.31.1、GnuTLS 6.3.0、c-ares 1.19.1、libssh2 1.11.0

编译环境

MinGW-w64 x86_64 (GCC 13.0) /gcc-win32 20220113
 
编译时间:2025-11-13 11:17:49
 
系统:Windows 6.2 (Windows 8/Server 2012)

项目仓库地址

Usage: aria2c [OPTIONS] [URI | MAGNET | TORRENT_FILE | METALINK_FILE]...
Printing options tagged with '#basic'.
See 'aria2c -h#help' to know all available tags.
Options:
 -v, --version                Print the version number and exit.

                              Tags: #basic

 -h, --help[=TAG|KEYWORD]     Print usage and exit.
                              The help messages are classified with tags. A tag
                              starts with "#". For example, type "--help=#http"
                              to get the usage for the options tagged with
                              "#http". If non-tag word is given, print the usage
                              for the options whose name includes that word.

                              Possible Values: #basic, #advanced, #http, #https, #ftp, #metalink, #bittorrent, #cookie, #hook, #file, #rpc, #checksum, #experimental, #deprecated, #help, #all
                              Default: #basic
                              Tags: #basic, #help

 -l, --log=LOG                The file name of the log file. If '-' is
                              specified, log is written to stdout.

                              Possible Values: /path/to/file, -
                              Tags: #basic

 -d, --dir=DIR                The directory to store the downloaded file.

                              Possible Values: /path/to/directory
                              Default: C:\Users\Administrator\Downloads\yt-dlp
                              Tags: #basic, #file

 -o, --out=FILE               The file name of the downloaded file. It is
                              always relative to the directory given in -d
                              option. When the -Z option is used, this option
                              will be ignored.

                              Possible Values: /path/to/file
                              Tags: #basic, #http, #ftp, #file

 -s, --split=N                Download a file using N connections. If more
                              than N URIs are given, first N URIs are used and
                              remaining URLs are used for backup. If less than
                              N URIs are given, those URLs are used more than
                              once so that N connections total are made
                              simultaneously. The number of connections to the
                              same host is restricted by the
                              --max-connection-per-server option. See also the
                              --min-split-size option.

                              Possible Values: 1-*
                              Default: 8
                              Tags: #basic, #http, #ftp

 --file-allocation=METHOD     Specify file allocation method.
                              'none' doesn't pre-allocate file space. 'prealloc'
                              pre-allocates file space before download begins.
                              This may take some time depending on the size of
                              the file.
                              If you are using newer file systems such as ext4
                              (with extents support), btrfs, xfs or NTFS
                              (MinGW build only), 'falloc' is your best
                              choice. It allocates large(few GiB) files
                              almost instantly. Don't use 'falloc' with legacy
                              file systems such as ext3 and FAT32 because it
                              takes almost the same time as 'prealloc' and it
                              blocks aria2 entirely until allocation finishes.
                              'falloc' may not be available if your system
                              doesn't have posix_fallocate() function.
                              'trunc' uses ftruncate() system call or
                              platform-specific counterpart to truncate a file
                              to a specified length.

                              Possible Values: none, prealloc, trunc, falloc
                              Default: prealloc
                              Tags: #basic, #file

 -V, --check-integrity[=true|false] Check file integrity by validating piece
                              hashes or a hash of entire file. This option has
                              effect only in BitTorrent, Metalink downloads
                              with checksums or HTTP(S)/FTP downloads with
                              --checksum option. If piece hashes are provided,
                              this option can detect damaged portions of a file
                              and re-download them. If a hash of entire file is
                              provided, hash check is only done when file has
                              been already download. This is determined by file
                              length. If hash check fails, file is
                              re-downloaded from scratch. If both piece hashes
                              and a hash of entire file are provided, only
                              piece hashes are used.

                              Possible Values: true, false
                              Default: false
                              Tags: #basic, #metalink, #bittorrent, #file, #checksum

 -c, --continue[=true|false]  Continue downloading a partially downloaded
                              file. Use this option to resume a download
                              started by a web browser or another program
                              which downloads files sequentially from the
                              beginning. Currently this option is only
                              applicable to http(s)/ftp downloads.

                              Possible Values: true, false
                              Default: false
                              Tags: #basic, #http, #ftp

 -i, --input-file=FILE        Downloads URIs found in FILE. You can specify
                              multiple URIs for a single entity: separate
                              URIs on a single line using the TAB character.
                              Reads input from stdin when '-' is specified.
                              Additionally, options can be specified after each
                              line of URI. This optional line must start with
                              one or more white spaces and have one option per
                              single line. See INPUT FILE section of man page
                              for details. See also --deferred-input option.

                              Possible Values: /path/to/file, -
                              Tags: #basic

 -j, --max-concurrent-downloads=N Set maximum number of parallel downloads for
                              every static (HTTP/FTP) URL, torrent and metalink.
                              See also --split and --optimize-concurrent-downloads options.

                              Possible Values: 1-*
                              Default: 5
                              Tags: #basic

 -Z, --force-sequential[=true|false] Fetch URIs in the command-line sequentially
                              and download each URI in a separate session, like
                              the usual command-line download utilities.

                              Possible Values: true, false
                              Default: false
                              Tags: #basic

 -x, --max-connection-per-server=NUM The maximum number of connections to one
                              server for each download.

                              Possible Values: 1-*
                              Default: 32
                              Tags: #basic, #http, #ftp

 -k, --min-split-size=SIZE    aria2 does not split less than 2*SIZE byte range.
                              For example, let's consider downloading 20MiB
                              file. If SIZE is 10M, aria2 can split file into 2
                              range [0-10MiB) and [10MiB-20MiB) and download it
                              using 2 sources(if --split >= 2, of course).
                              If SIZE is 15M, since 2*15M > 20MiB, aria2 does
                              not split file and download it using 1 source.
                              You can append K or M(1K = 1024, 1M = 1024K).

                              Possible Values: 1024-1073741824
                              Default: 1M
                              Tags: #basic, #http, #ftp

 --ftp-user=USER              Set FTP user. This affects all URLs.

                              Tags: #basic, #ftp

 --ftp-passwd=PASSWD          Set FTP password. This affects all URLs.

                              Tags: #basic, #ftp

 --http-user=USER             Set HTTP user. This affects all URLs.

                              Tags: #basic, #http

 --http-passwd=PASSWD         Set HTTP password. This affects all URLs.

                              Tags: #basic, #http

 --load-cookies=FILE          Load Cookies from FILE using the Firefox3 format
                              and Mozilla/Firefox(1.x/2.x)/Netscape format.

                              Possible Values: /path/to/file
                              Tags: #basic, #http, #cookie

 -S, --show-files[=true|false] Print file listing of .torrent, .meta4 and
                              .metalink file and exit. More detailed
                              information will be listed in case of torrent
                              file.

                              Possible Values: true, false
                              Default: false
                              Tags: #basic, #metalink, #bittorrent

 --max-overall-upload-limit=SPEED Set max overall upload speed in bytes/sec.
                              0 means unrestricted.
                              You can append K or M(1K = 1024, 1M = 1024K).
                              To limit the upload speed per torrent, use
                              --max-upload-limit option.

                              Possible Values: 0-*
                              Default: 0
                              Tags: #basic, #bittorrent

 -u, --max-upload-limit=SPEED Set max upload speed per each torrent in
                              bytes/sec. 0 means unrestricted.
                              You can append K or M(1K = 1024, 1M = 1024K).
                              To limit the overall upload speed, use
                              --max-overall-upload-limit option.

                              Possible Values: 0-*
                              Default: 0
                              Tags: #basic, #bittorrent

 -T, --torrent-file=TORRENT_FILE  The path to the .torrent file.

                              Possible Values: /path/to/file
                              Tags: #basic, #bittorrent

 --listen-port=PORT...        Set TCP port number for BitTorrent downloads.
                              Multiple ports can be specified by using ',',
                              for example: "6881,6885". You can also use '-'
                              to specify a range: "6881-6999". ',' and '-' can
                              be used together.

                              Possible Values: 1024-65535
                              Default: 6881-6999
                              Tags: #basic, #bittorrent

 --enable-dht[=true|false]    Enable IPv4 DHT functionality. It also enables
                              UDP tracker support. If a private flag is set
                              in a torrent, aria2 doesn't use DHT for that
                              download even if ``true`` is given.

                              Possible Values: true, false
                              Default: true
                              Tags: #basic, #bittorrent

 --dht-listen-port=PORT...    Set UDP listening port used by DHT(IPv4, IPv6)
                              and UDP tracker. Multiple ports can be specified
                              by using ',', for example: "6881,6885". You can
                              also use '-' to specify a range: "6881-6999".
                              ',' and '-' can be used together.

                              Possible Values: 1024-65535
                              Default: 6881-6999
                              Tags: #basic, #bittorrent

 --enable-dht6[=true|false]   Enable IPv6 DHT functionality.
                              Use --dht-listen-port option to specify port
                              number to listen on. See also --dht-listen-addr6
                              option.

                              Possible Values: true, false
                              Default: false
                              Tags: #basic, #bittorrent

 --dht-listen-addr6=ADDR      Specify address to bind socket for IPv6 DHT.
                              It should be a global unicast IPv6 address of the
                              host.

                              Tags: #basic, #bittorrent

 -M, --metalink-file=METALINK_FILE The file path to the .meta4 and .metalink
                              file. Reads input from stdin when '-' is
                              specified.

                              Possible Values: /path/to/file, -
                              Tags: #basic, #metalink

URI, MAGNET, TORRENT_FILE, METALINK_FILE:
 You can specify multiple HTTP(S)/FTP URIs. Unless you specify -Z option, all
 URIs must point to the same file or downloading will fail.
 You can also specify arbitrary number of BitTorrent Magnet URIs, torrent/
 metalink files stored in a local drive. Please note that they are always
 treated as a separate download.

 You can specify both torrent file with -T option and URIs. By doing this,
 download a file from both torrent swarm and HTTP/FTP server at the same time,
 while the data from HTTP/FTP are uploaded to the torrent swarm. For single file
 torrents, URI can be a complete URI pointing to the resource or if URI ends
 with '/', 'name' in torrent file is added. For multi-file torrents, 'name' and
 'path' in torrent are added to form a URI for each file.

 Make sure that URI is quoted with single(') or double(") quotation if it
 contains "&" or any characters that have special meaning in shell.

About the number of connections
 Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB
 segment size restriction. So whatever value you specify using -s option, it
 uses 1 connection per host. To make it behave like 1.9.x, use
 --max-connection-per-server=4 --min-split-size=1M.

Refer to man page for more information.

aria2c(1) — aria2 1.37.0 documentation

aria2c 命令按功能分类的:

分类 选项 描述
基本选项 -d, --dir=<dir> 设置下载文件保存的目录
  -o, --out=<file> 设置下载文件的输出文件名
  -i, --input-file=<file> 从指定文件中读取下载任务
  -j, --max-connection-per-server=<num> 设置每个服务器的最大连接数
下载控制 -x, --max-connection-per-server=<num> 设置每个服务器的最大连接数
  -s, --split=<num> 设置文件分片下载的数量
  -k, --min-split-size=<size> 设置每个分片的最小大小
  -u, --user-agent=<string> 设置 HTTP 请求的 User-Agent
  --check-certificate=false 禁用 SSL 证书检查
  -t, --timeout=<seconds> 设置连接和下载的超时时间
下载协议设置 --bt-enable-lpd=true 启用 BitTorrent 的局部发现协议
  --bt-max-peers=<num> 设置 BitTorrent 最大对等节点数
  --bt-tracker=<tracker> 设置 BitTorrent 跟踪器地址
代理设置 --http-proxy=<proxy> 设置 HTTP 代理地址
  --https-proxy=<proxy> 设置 HTTPS 代理地址
  --ftp-proxy=<proxy> 设置 FTP 代理地址
文件管理 --file-allocation=<method> 设置文件分配方法(预分配、按需分配等)
  --continue 启用断点续传
  --auto-file-renaming=false 禁用自动重命名下载文件
  --download-result=<file> 下载完成后将文件列表保存到指定文件
日志与调试 --log=<file> 将日志输出到指定文件
  --log-level=<level> 设置日志输出的详细级别(debug, info, notice, warn, error, critical)
限速与带宽 --max-download-limit=<speed> 设置最大下载速度限制
  --max-upload-limit=<speed> 设置最大上传速度限制
RPC 接口 --rpc-listen-port=<port> 设置 RPC 服务监听的端口
  --rpc-secret=<password> 设置 RPC 密码
  --rpc-user=<user> 设置 RPC 用户名
BitTorrent 选项 --bt-stop-timeout=<seconds> 设置 BitTorrent 停止的超时时间
  --bt-hash-check-seed=true 启用 BitTorrent 种子文件哈希校验
Metalink 设置 --metalink 启用 Metalink 支持
WebSocket 设置 --websocket-protocol 启用 WebSocket 协议支持
下载队列与批量 --max-download-limit 设置最大下载限制
  -n, --max-download-limit 设置最大下载限制
进度与状态显示 -q, --quiet 禁用所有输出
  -v, --verbose 显示详细输出

这只是常用选项的一部分,aria2c 还提供了很多其他的功能和设置选项,适用于各种不同的下载任务配置。您可以使用 aria2c --help 命令获取所有选项的完整列表和说明。

BT (BitTorrent) trackers 是用于帮助 P2P 网络中节点之间交换信息的服务器。在 BitTorrent 协议中,BT trackers 扮演着关键角色,它们用于协调种子与下载者之间的连接,帮助完成文件的共享和分发。

按照功能分类,BT trackers 可以分为以下几种类型:

功能分类 描述 示例
公开 Tracker (Public Trackers) 对所有用户开放,任何人都可以使用并参与下载与上传,无需注册或授权。 - The Pirate Bay (曾是世界著名的公开 tracker)
私人 Tracker (Private Trackers) 需要邀请码或者注册才能使用,只允许授权用户访问。这类 tracker 通常有更严格的管理制度。 - IPTorrents、HDBits、What.CD (已关闭)
内容类型特定 Tracker 针对特定类型的内容进行优化,如电影、音乐、游戏等,用户可以专门选择某个 tracker 进行下载。 - 1337x (电影、电视内容);- Redacted (音乐内容)
匿名 Tracker (Anonymous Trackers) 保证用户隐私的 tracker,通常不要求用户提供任何个人信息,或者使用代理和加密方式隐藏用户身份。 - RARBG、Zooqle
DHT (Distributed Hash Table) Tracker 无需传统的中心服务器,DHT tracker 通过分布式协议实现对种子信息的共享。 - BitTorrent 内置 DHT 支持、qBittorrent、FrostWire
封闭式 Tracker (Closed Trackers) 限制访问,仅开放给特定群体或成员,通常需要邀请码或特殊权限。 - AL (Anime Layer) (动漫内容),- Bibliotik (书籍和文献内容)
加密 Tracker (Encrypted Trackers) 通过加密传输确保用户在下载和上传文件时的安全性,保护用户的身份和活动。 - PrivateHD(高清视频内容),- PassThePopcorn(电影)
高速 Tracker (High-speed Trackers) 旨在提供较高的下载速度,通常拥有大量种子和活跃用户。 - T411 (曾为高速 tracker),- TorrentLeech
文件分享类 Tracker 主要用于分发特定类型的文件,如应用程序、电子书等。 - Bibliotik(电子书),- Audiobookbay(有声书)
高清种子 Tracker 专注于高质量视频内容,如蓝光、高清视频等。 - HD-Torrents,- BLU-Torrents
专注于版权内容的 Tracker 提供大量版权内容的下载,可能涉及版权法律问题。 - PTP (Private Tracker for Movies),- Cinemageddon

说明:

  1. 公开 Tracker (Public Trackers):这些 tracker 对所有人开放,任何用户都可以参与文件的共享,不需要特殊权限,适合不在意隐私的用户。由于开放性较大,这类 tracker 可能存在大量假种子和较低的下载速度。

  2. 私人 Tracker (Private Trackers):需要注册或邀请码,通常对用户行为有更严格的管理和限制,提供更高的文件质量和更好的下载速度。私人 tracker 还通常会设定上传与下载的比例,防止“只下载不上传”的行为。

  3. 内容类型特定 Tracker:专注于某一类特定内容的分享,通常这些 tracker 会有更专业的管理和内容分类,适合需要特定内容的用户。

  4. 匿名 Tracker (Anonymous Trackers):这种 tracker 更注重保护用户的隐私,允许用户在不泄露个人信息的情况下下载和上传内容。

  5. DHT (Distributed Hash Table) Tracker:不同于传统的中心化服务器,DHT 通过去中心化的方式将文件信息分散存储,适合无法访问中心化 tracker 的用户。

  6. 封闭式 Tracker (Closed Trackers):这种 tracker 对外部用户设置了更高的门槛,只有经过授权的用户才能加入。这类 tracker 往往拥有更加严格的管理制度,内容质量和下载速度也较高。

  7. 加密 Tracker (Encrypted Trackers):确保在文件传输过程中使用加密技术来保护用户隐私,这类 tracker 避免了传统 tracker 在数据传输中可能出现的隐私泄露风险。

  8. 高速 Tracker (High-speed Trackers):这些 tracker 提供大量种子和活跃的用户,使得下载速度较快,适合对下载速度有较高要求的用户。

  9. 文件分享类 Tracker:这类 tracker 专注于某些特定类型的文件,比如应用程序、电子书等,满足特定用户群体的需求。

  10. 高清种子 Tracker:专门用于分发高清视频种子,通常提供蓝光质量的视频,适合对视频画质要求较高的用户。

  11. 专注于版权内容的 Tracker:主要发布有版权的内容,通常这些 tracker 会有更严格的管理和用户审查,但同时也面临更高的法律风险。

总结:

不同类型的 BT trackers 各自有不同的使用特点和限制。公开 tracker 更加自由,但可能存在文件质量和下载速度较差的问题;而私人 tracker 提供更高的文件质量和下载速度,但需要邀请码或注册才能访问。随着网络安全和隐私保护的需求不断提高,一些 tracker 也开始加入加密和匿名功能,保障用户隐私。

 

13. 下载大文件时的技巧

如果你在下载大文件时遇到网络中断或者需要恢复下载,可以使用支持断点续传的工具(如 curl、aria2)。例如,使用 curl 下载大文件并支持断点续传:

cmdCopy Code
curl -C - -O http://example.com/largefile.zip

其中 -C - 表示继续下载(即使连接断开后也能恢复)。

如果使用 aria2,可以直接使用类似的参数来支持断点续传:

cmdCopy Code
aria2c -c -o C:\path\to\save\file.zip http://example.com/largefile.zip

 

Windows 提供了多种方式来下载文件,除了基本的 PowerShell 方法之外,还有一些额外的工具和技巧,可以大大提高下载效率。无论是通过原生的 PowerShell 命令、FTP 客户端,还是安装第三方工具如 aria2、curl 或 wget,你都可以根据需求选择合适的工具。

对于高效下载、自动化或需要高可靠性的下载任务,使用像 aria2 或 curl 这样的工具会更为便捷。


探索 Windows 下的下载技巧,我们可以深入了解一些其他的高级方法以及一些常见的下载问题和解决办法:

14. 使用 BitsTransfer 下载文件

Background Intelligent Transfer Service (BITS) 是 Windows 系统自带的一项服务,用于在后台高效、低带宽地下载文件。BitsTransfer 是一种相对高效的下载方式,适用于需要在后台持续下载的任务,尤其是在不希望影响用户前台操作时。

示例命令:

powershellCopy Code
Start-BitsTransfer -Source "http://example.com/file.zip" -Destination "C:\path\to\save\file.zip"

特点:

  • 适用于大文件下载,可以自动恢复中断的下载任务。
  • 不占用过多带宽资源,下载过程通常在后台运行,不会干扰前台应用的正常操作。

注意:

  • BITS 的下载方式通常比普通 HTTP 下载更为稳定,适合在网络不稳定时使用。

15. 批量下载文件(使用 wget 或 aria2)

如果你需要从一个列表中批量下载多个文件,工具如 wget 和 aria2 都支持批量下载功能。

  • 使用 wget 批量下载文件(通过文件列表):

    首先创建一个包含下载链接的文本文件(如 urls.txt),每一行一个 URL,例如:

    txtCopy Code
    http://example.com/file1.zip
    http://example.com/file2.zip
    http://example.com/file3.zip

    然后使用以下命令批量下载:

    cmdCopy Code
    wget -i urls.txt
  • 使用 aria2 批量下载:

    aria2 同样支持批量下载,并且可以通过简单的命令实现并行下载。你也可以从文件列表中下载:

    cmdCopy Code
    aria2c -i urls.txt

    aria2 默认会并行下载多个文件,这有助于提高下载速度。

16. 使用 curl 下载多个文件并行

如果你使用的是 curl,并且希望同时下载多个文件,可以通过以下方式实现并行下载:

bashCopy Code
curl -O http://example.com/file1.zip & 
curl -O http://example.com/file2.zip & 
curl -O http://example.com/file3.zip &
wait

以上命令将在后台并行启动多个下载进程,& 符号用于将每个下载任务放在后台执行,wait 用于等待所有任务完成。

注意:

  • 这种方法适合简单的批量并行下载,但无法像 aria2 那样高效地控制并发数量。
  • 并行下载时,确保你的网络带宽足够支持多个文件的同时下载。

17. 使用 PowerShell 获取 HTTP 响应头信息

有时,在下载文件之前,我们可能需要检查文件的大小、类型或是否存在。你可以使用 PowerShell 的 Invoke-WebRequest 来获取 HTTP 响应头,帮助你更好地控制下载过程。

示例命令:

powershellCopy Code
$response = Invoke-WebRequest -Uri "http://example.com/file.zip" -Method Head
$response.Headers

这个命令会返回文件的 HTTP 响应头信息,包括文件大小(Content-Length),文件类型(Content-Type),以及其他元数据。通过查看文件的大小,你可以决定是否开始下载,或者是否有足够的空间。

18. 使用 curl 获取文件信息

使用 curl 时,可以通过 -I 选项获取文件的 HTTP 响应头:

cmdCopy Code
curl -I http://example.com/file.zip

这将返回文件的 HTTP 头信息,其中包括 Content-Length(文件大小)、Content-Type(文件类型)等信息。

19. 下载带有复杂查询字符串的文件

对于包含复杂查询字符串的 URL(例如,有多个参数的 URL),你可以直接通过命令行工具下载文件。

示例使用 curl:

cmdCopy Code
curl -O "http://example.com/file.zip?param1=value1&param2=value2"

示例使用 Invoke-WebRequest(PowerShell):

powershellCopy Code
Invoke-WebRequest -Uri "http://example.com/file.zip?param1=value1&param2=value2" -OutFile "C:\path\to\save\file.zip"

注意:

  • 确保 URL 中的查询字符串完全正确,并且特殊字符(如 &, =, ? 等)没有被错误地转义。

20. 利用 aria2 加速下载(多线程下载)

aria2 支持多线程下载,并且可以在多个连接之间分配下载任务,从而加速下载过程。例如:

cmdCopy Code
aria2c -x 16 -s 16 -o C:\path\to\save\file.zip http://example.com/file.zip

解释:

  • -x 16 表示最多使用 16 个连接来下载文件。
  • -s 16 表示从服务器请求文件时使用 16 个分段进行下载。
  • 这种方式可以大大提高大文件下载的速度,尤其是在高带宽网络下。

21. 解决下载速度慢的问题

如果在下载过程中遇到速度慢的情况,可能与以下因素有关:

  • 网络带宽限制:确保没有其他程序占用过多的带宽。
  • 下载服务器的带宽限制:某些网站可能对每个连接的下载速度有限制,你可以尝试使用多个连接来加速下载(如通过 aria2 的并行下载功能)。
  • 更换下载源:如果文件可以通过多个服务器下载,尝试切换到其他服务器或者镜像站点。
  • 使用 CDN 加速:一些网站会提供 CDN(内容分发网络)加速功能,选择离你更近的 CDN 节点下载文件,可以提高速度。

22. 防止下载文件损坏(校验文件)

下载过程中,文件可能会损坏。为了确保文件完整,可以使用哈希值(如 MD5、SHA-1 或 SHA-256)来校验下载的文件。

步骤:

  • 首先获取文件的哈希值(通常文件提供方会提供)。
  • 然后使用工具(如 PowerShell)来计算你下载的文件的哈希值,并与提供的哈希值进行比较。

使用 PowerShell 计算文件的 SHA-256 哈希值:

powershellCopy Code
Get-FileHash "C:\path\to\file.zip" -Algorithm SHA256

如果计算出的哈希值与提供的哈希值一致,说明文件没有损坏。

 

无论是下载单个文件、批量文件,还是提高下载效率,Windows 提供了多种命令行工具和方法来完成这些任务。从 PowerShell、wget、curl 到第三方工具如 aria2,每种工具都有其适用场景。掌握这些工具的使用方法,可以帮助你在 Windows 上高效、可靠地下载文件。如果遇到下载中断、速度慢或文件损坏等问题,通过工具的高级选项(如多线程、断点续传、文件校验等)可以有效地解决。


探索 Windows 下的下载技巧,我们可以进一步深入了解一些其他实用的技巧和方法,这些技巧不仅有助于提高下载效率,还能帮助你更好地管理下载任务。

23. 使用 PowerShell 自动化下载任务

PowerShell 是一个强大的工具,可以用来自动化和调度下载任务。通过结合脚本,可以定时、批量下载文件,或者在特定条件下自动启动下载。

示例:自动定时下载文件

假设你需要每天定时下载一个文件,可以使用 PowerShell 脚本配合任务计划程序来实现:

  1. 创建一个 PowerShell 脚本(如 downloadFile.ps1):

    powershellCopy Code
    $url = "http://example.com/file.zip"
    $destination = "C:\path\to\save\file.zip"
    Invoke-WebRequest -Uri $url -OutFile $destination
  2. 使用 Windows 任务计划程序定时运行该脚本:

    • 打开任务计划程序,点击 "创建基本任务"。
    • 在触发器中选择 "每天" 或其他适合的时间。
    • 在操作中选择 "启动程序",并指向 PowerShell 脚本的路径。

这样,你就可以自动化每天的下载任务了。

24. 使用 wget 下载带认证的文件

如果你需要下载的文件是从需要认证的服务器获取的(如需要用户名和密码),你可以使用 wget 在命令行中加入认证信息。

示例:使用基本认证下载文件

cmdCopy Code
wget --user=username --password=password http://example.com/file.zip

如果网站使用的是其他类型的认证(如令牌或表单认证),你也可以通过 wget 配合请求头(headers)来完成。例如:

cmdCopy Code
wget --header="Authorization: Bearer YOUR_ACCESS_TOKEN" http://example.com/file.zip

注意: 使用命令行时,尤其是涉及敏感信息(如用户名、密码、令牌)时,要特别小心,避免泄露凭证。

25. 处理下载文件中的重定向

很多时候,下载链接会因为重定向而导致下载失败。wget 和 curl 都支持自动处理重定向。

示例:使用 wget 处理重定向

默认情况下,wget 会跟踪 HTTP 重定向。如果遇到重定向链接,wget 会自动跳转到新地址继续下载文件:

cmdCopy Code
wget http://example.com/redirected-file.zip

示例:使用 curl 处理重定向

curl 也可以通过 -L 参数来跟踪重定向:

cmdCopy Code
curl -L http://example.com/redirected-file.zip -o file.zip

使用 -L 参数,curl 会自动跟随所有重定向并下载最终目标文件。

26. 批量下载大文件时的速度优化

如果你需要下载多个大文件,下载速度可能会受到网络波动或服务器限制的影响。为了优化下载速度,可以考虑以下几种方法:

  • 使用多线程下载: 使用支持多线程下载的工具(如 aria2)可以显著提高下载速度。aria2 会将一个文件分成多个部分进行并行下载,从而提升下载效率。

    示例命令(最大 16 个线程):

    cmdCopy Code
    aria2c -x 16 -s 16 -d "C:\path\to\save" http://example.com/file1.zip
  • 切换下载源: 如果某个服务器的下载速度较慢,可以尝试切换到镜像站点或其他 CDN 服务器下载,通常这些服务器离你更近,速度也更快。

  • 下载管理工具: 使用下载管理器(如 Internet Download Manager (IDM))可以帮助你加速和管理下载任务。IDM 支持多个线程下载和自动恢复功能,是一个非常受欢迎的工具。

27. 通过下载工具处理限速

许多下载站点对每个连接的速度进行限制,或者根据你的地理位置限制带宽。为了绕过这些限制,使用支持断点续传和多线程下载的工具可以帮助你提升下载速度。

例如:使用 IDM 进行下载

  • IDM 支持多线程下载,通过分割文件并行下载,可以大大提升下载速度,尤其是对于下载大文件时。
  • 另外,IDM 还支持自动重新连接和恢复下载,适用于不稳定的网络环境。

另外,aria2 也有类似的功能,可以通过调整 -x(最大连接数)和 -s(分段数)来优化下载速度。

28. 使用 aria2 限制下载速度

如果你在下载时需要限制下载的带宽(比如你不想占用全部带宽),可以使用 aria2 来设置速度限制。

示例:限制最大下载速度为 1MB/s

cmdCopy Code
aria2c --max-download-limit=1M -o "file.zip" http://example.com/file.zip

这个命令将会将下载速度限制为每秒 1MB。

29. 下载文件并自动解压

如果你下载的是压缩文件(如 .zip 文件),并且希望在下载完成后自动解压,可以使用 PowerShell 或其他脚本来实现这一功能。

示例:下载并自动解压 .zip 文件(使用 PowerShell)

powershellCopy Code
$url = "http://example.com/file.zip"
$destination = "C:\path\to\save\file.zip"
$extractPath = "C:\path\to\extract\"

# 下载文件
Invoke-WebRequest -Uri $url -OutFile $destination

# 解压文件
Expand-Archive -Path $destination -DestinationPath $extractPath

这个脚本首先下载文件,然后使用 Expand-Archive 命令将下载的 .zip 文件解压到指定目录。

30. 通过 PowerShell 检查下载文件的完整性

如果你希望确保下载的文件没有损坏,除了使用哈希值来校验文件完整性外,你还可以在 PowerShell 中使用 Test-FileHash 来验证文件的哈希。

示例:校验下载文件的哈希值

假设你已经知道目标文件的 SHA-256 哈希值(例如,文件的 MD5 或 SHA-256 校验和),可以使用以下命令验证下载文件的完整性:

powershellCopy Code
$expectedHash = "your_expected_sha256_hash_value"
$filePath = "C:\path\to\downloaded\file.zip"

$actualHash = Get-FileHash -Path $filePath -Algorithm SHA256
if ($actualHash.Hash -eq $expectedHash) {
    Write-Host "文件完整,下载成功!"
} else {
    Write-Host "文件损坏,下载失败!"
}

通过这种方式,你可以确保下载的文件与预期一致,避免文件损坏的情况。

31. 使用 wget 自动重试下载

如果下载过程中遇到错误或网络问题,可以通过 wget 配置自动重试机制,确保下载任务可以顺利完成。

示例:设置最大重试次数

cmdCopy Code
wget --tries=10 --timeout=30 http://example.com/file.zip

这个命令设置了 wget 在下载失败时最多重试 10 次,每次尝试的超时时间为 30 秒。这样可以避免因为偶尔的网络波动而中断下载任务。

 

通过合理使用这些高级技巧,你可以在 Windows 上更高效、更可靠地管理下载任务。无论是自动化下载、批量下载,还是处理下载中常见的问题(如限速、重定向、文件损坏等),掌握这些方法能够大大提升你的下载体验。


深入探讨一些更为高级的下载技巧,让你能够在不同场景下提高下载效率和管理能力。

32. 利用 curl 实现多种下载方式

curl 是一个非常灵活的命令行工具,除了支持基本的文件下载外,它还支持多种协议和功能,可以用于更复杂的下载需求。

示例:使用 curl 下载并显示下载进度

curl 默认会显示下载的进度条,表示下载进度、速度、剩余时间等信息。如果你需要更加详细的进度信息,可以使用 -# 参数来让进度条显示得更直观。

bashCopy Code
curl -# -o "file.zip" http://example.com/file.zip

示例:下载并限制速度

如果你需要限制下载的带宽,可以通过 --limit-rate 参数来控制下载速度:

bashCopy Code
curl --limit-rate 500k -o "file.zip" http://example.com/file.zip

这个命令将下载速度限制为每秒 500KB。

示例:使用代理下载

如果你需要通过代理服务器进行下载,curl 也支持通过代理来获取文件:

bashCopy Code
curl -x http://proxyserver:port -o "file.zip" http://example.com/file.zip

这将通过指定的代理服务器下载文件。

33. 下载视频文件

许多人需要下载在线的视频文件,尤其是流媒体网站的视频。在这种情况下,工具如 youtube-dl 或 yt-dlp 变得非常有用。

示例:使用 yt-dlp 下载 YouTube 视频

yt-dlp 是 youtube-dl 的一个增强版本,支持更多网站,并且有更多高级选项。你可以通过以下命令来下载视频:

bashCopy Code
yt-dlp https://www.youtube.com/watch?v=dQw4w9WgXcQ

该命令将自动下载视频。如果你想要指定保存的文件夹,可以使用 -o 参数:

bashCopy Code
yt-dlp -o "C:\Downloads\%(title)s.%(ext)s" https://www.youtube.com/watch?v=dQw4w9WgXcQ

示例:下载视频并提取音频

如果你只需要下载音频而不是完整的视频,可以使用以下命令:

bashCopy Code
yt-dlp -x --audio-format mp3 https://www.youtube.com/watch?v=dQw4w9WgXcQ

这将下载并提取音频,格式为 MP3。

34. 优化大文件下载的稳定性

对于一些特别大的文件(例如,几 GB 以上的文件),下载过程中经常会出现中断或超时的情况。在这种情况下,你可以使用 断点续传 和 多线程下载 来提高下载的稳定性和速度。

断点续传:

许多下载管理工具,如 aria2 或 IDM,都支持断点续传功能。假如你正在下载一个大文件,下载途中出现中断,你可以继续从断点位置重新开始下载,避免重新下载整个文件。

示例:使用 aria2 进行断点续传

bashCopy Code
aria2c -c -o "largefile.zip" http://example.com/largefile.zip

其中,-c 参数表示继续下载文件,如果文件已经部分下载过,aria2 会从上次中断的地方继续下载。

35. 下载文件并自动备份

在企业环境或个人数据保护需求较高的场景下,下载的文件往往需要自动备份或同步到其他设备。你可以结合 同步工具 或 自动备份软件 来完成这个任务。

示例:使用 robocopy 自动备份下载的文件

robocopy 是 Windows 自带的一个强大复制工具,可以用来同步或备份文件。假设你下载了一个文件,并希望将其自动备份到外部硬盘或云存储目录,你可以创建一个批处理脚本,定期进行备份。

bashCopy Code
robocopy "C:\path\to\downloaded" "E:\backup\downloaded" /MIR

这个命令会将下载目录中的文件镜像(/MIR)到指定的备份目录。如果你希望定时执行这个备份任务,可以将其添加到任务计划程序中。

36. 使用 aria2 管理多个下载任务

如果你有多个下载任务需要同时进行,可以通过 aria2 来管理多个文件的下载。aria2 支持批量下载,而且支持下载多个文件并行处理。

示例:使用 aria2 下载多个文件

bashCopy Code
aria2c -i download_list.txt

在 download_list.txt 文件中,列出所有下载链接,每个链接占一行:

Copy Code
http://example.com/file1.zip
http://example.com/file2.zip
http://example.com/file3.zip

使用上述命令后,aria2 会自动并行下载所有列出的文件。

37. 下载文件并使用加密存储

如果你需要下载敏感数据并进行加密存储,可以在下载完成后对文件进行加密。Windows 自带的 BitLocker 或 Veracrypt 可以帮助你加密文件或文件夹,保证下载内容的安全性。

示例:使用 PowerShell 加密文件

你可以在 PowerShell 中使用 Protect-CmsMessage 来加密文件:

powershellCopy Code
$file = "C:\path\to\downloaded\file.zip"
$encryptedFile = "C:\path\to\downloaded\file.zip.encrypted"
Protect-CmsMessage -Path $file -To "recipient@example.com" -OutFile $encryptedFile

这个命令会将下载的文件加密,只有拥有合适解密密钥的人才能访问它。

38. 使用 Cloud Storage 自动同步下载文件

如果你希望下载的文件能自动同步到云存储(例如,Google Drive、OneDrive 或 Dropbox),你可以通过安装这些云存储客户端来实现文件自动同步。大部分云存储客户端都支持 实时同步,只要你将下载的文件放入同步目录,它们会自动上传到云端。

示例:将下载文件自动上传到 Google Drive

  • 安装 Google Drive 桌面应用。
  • 将文件保存到 Google Drive 的同步文件夹中。这样,下载的文件会在下载完成后自动同步到 Google Drive。

这样,你可以确保下载的文件始终处于云端备份,避免数据丢失的风险。

39. 通过命令行定期下载内容

如果你需要定期从某个网站下载内容(例如日志文件或报告),可以使用任务调度程序和命令行工具(如 curl 或 wget)配合创建定时任务。

示例:使用 Windows 任务计划程序和 curl 定期下载报告

  1. 创建一个 PowerShell 脚本(例如 downloadReport.ps1):

    powershellCopy Code
    curl -o "C:\path\to\save\report.pdf" "http://example.com/report.pdf"
  2. 打开 任务计划程序,设置一个新的计划任务,每天或每周运行该脚本,从而定期下载最新的报告。

40. 下载时避开地区限制(VPN)

有时你可能会遇到地理限制,导致无法下载某些内容。使用 VPN(虚拟专用网络)可以帮助你绕过这些限制,通过选择其他国家的服务器下载文件。

示例:使用 VPN 配合下载

在 VPN 启动并连接到适当的地区后,你可以使用任何下载工具(如 wget, curl 或下载管理器)进行正常下载。VPN 将使你仿佛位于指定国家,从而突破地区限制。

 

以上这些技巧和工具,可以帮助你在 Windows 系统下更高效、更安全地进行文件下载、管理下载任务和处理大文件。


使用 PowerShell 下载文件,可以使用 Invoke-WebRequest 命令。以下是一个基本示例:

powershell
Invoke-WebRequest -Uri "https://example.com/file.zip" -OutFile "C:\path\to\save\file.zip"

说明:

  • -Uri:指定要下载文件的 URL。
  • -OutFile:指定文件保存的路径和文件名。

使用 PowerShell 下载文件的另一种方法,可以使用 New-Object System.Net.WebClient 对象的 DownloadFile 方法。这是另一种常见的下载方式。以下是实现下载的命令:

powershell
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile("https://example.com/file.zip", "C:\path\to\save\file.zip")

说明:

  • New-Object System.Net.WebClient 创建一个 WebClient 对象,专门用于下载文件。
  • DownloadFile 方法用于下载指定 URL 的文件并保存到本地指定路径。

除了 Invoke-WebRequest 和 New-Object System.Net.WebClient,你还可以通过其他 PowerShell 方法来下载文件。以下是几种常见的方法:

1. 使用 Start-BitsTransfer 命令

Start-BitsTransfer 是 PowerShell 提供的一个用于文件传输的命令,适用于大文件的下载或上传。它使用后台智能传输服务(BITS),通常用于需要高效、可靠传输的任务。

powershell
Start-BitsTransfer -Source "https://example.com/file.zip" -Destination "C:\path\to\save\file.zip"
  • 优点:适合大文件下载,具有断点续传功能,支持后台传输。

2. 使用 System.Net.Http.HttpClient 类

可以使用 .NET 的 HttpClient 类来下载文件。此方法提供了更多控制选项,如并发连接、请求头等。

powershell
$client = New-Object System.Net.Http.HttpClient
$response = $client.GetAsync("https://example.com/file.zip").Result
$response.Content.ReadAsByteArrayAsync().Result | Set-Content -Path "C:\path\to\save\file.zip" -Force
  • 优点:适用于高级应用,可以控制请求的头部和其他细节。

3. 使用 WebRequest 类

另一种方法是使用 .NET 的 WebRequest 类,它提供了对请求和响应的更细粒度控制。

powershell
$request = [System.Net.WebRequest]::Create("https://example.com/file.zip")
$response = $request.GetResponse()
$stream = $response.GetResponseStream()
$fs = New-Object System.IO.FileStream("C:\path\to\save\file.zip", [System.IO.FileMode]::Create)
$buffer = New-Object byte[] 1024
while(($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) {
    $fs.Write($buffer, 0, $read)
}
$fs.Close()
$stream.Close()
  • 优点:适合需要详细管理流、处理复杂响应等高级操作。

4. 使用 wget 或 curl 命令(在 Windows 上安装)

如果你在 Windows 上安装了 wget 或 curl,可以通过调用这些工具来下载文件。PowerShell 可以直接执行这些命令。

powershell
wget "https://example.com/file.zip" -OutFile "C:\path\to\save\file.zip"

或者:

powershell
curl -o "C:\path\to\save\file.zip" "https://example.com/file.zip"
  • 优点:这些工具非常简便,可以快速下载文件,也支持很多命令行参数。

总结:

方法 描述 优点
Invoke-WebRequest PowerShell 内置的命令,功能强大 适合普通下载需求,支持认证、代理、请求头等功能
New-Object System.Net.WebClient 创建 WebClient 对象进行文件下载 简单易用,适合小型文件下载
Start-BitsTransfer 使用 BITS(后台智能传输服务)进行文件传输 高效,适合大文件,支持断点续传
HttpClient 使用 .NET 的 HttpClient 类进行下载 高级控制,支持异步下载和多种请求选项
WebRequest 使用 .NET 的 WebRequest 类处理下载 细粒度控制,适合复杂下载需求
wget 或 curl 使用外部工具(如 wget 或 curl)下载文件 简单快速,支持多种命令行选项

除了上面提到的方法,还有一些其他的另类下载方式可以用来在 PowerShell 中下载文件,尤其适用于特定的需求或场景。以下是一些常见的另类下载方法:

1. 使用 FTP 下载

如果你需要通过 FTP 下载文件,可以使用 PowerShell 的 WebClient 类来进行 FTP 文件下载。

powershell
$ftp = "ftp://example.com/file.zip"
$localPath = "C:\path\to\save\file.zip"
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential("username", "password")
$webclient.DownloadFile($ftp, $localPath)
  • 优点:适用于通过 FTP 协议下载文件,支持认证。

2. 通过 FileInfo 类操作本地文件下载

如果你要从本地系统中传输文件(比如本地网络共享或指定位置),可以使用 FileInfo 类结合网络传输。

powershell
$source = "C:\path\to\source\file.zip"
$destination = "\\network\share\path\to\save\file.zip"
$file = New-Object System.IO.FileInfo($source)
$file.CopyTo($destination, $true)  # $true 表示覆盖现有文件
  • 优点:适用于本地文件的传输或网络共享文件。

3. 使用 WebClient 和 Async 下载

对于需要异步下载的场景,你可以使用 WebClient 类的异步方法进行文件下载,以便不阻塞脚本的其他部分。

powershell
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFileAsync("https://example.com/file.zip", "C:\path\to\save\file.zip")
  • 优点:异步下载不会阻塞执行,适合需要同时处理其他任务的场景。

4. 通过 SFTP 下载(使用第三方模块)

PowerShell 默认不支持 SFTP(安全文件传输协议),但你可以使用第三方模块,比如 PSSFTP,来实现 SFTP 文件下载。

powershell
Install-Module -Name PSSFTP
$session = New-SFTPSession -ComputerName "sftp.example.com" -Credential (Get-Credential)
Get-SFTPFile -SessionId $session.SessionId -RemoteFile "/remote/path/file.zip" -LocalPath "C:\path\to\save\file.zip"
  • 优点:适用于需要通过 SFTP 进行安全文件传输的场景。

5. 通过 Powershell 与 Python 脚本结合下载

如果你需要更复杂的下载逻辑,可以结合 Python 的 requests 库进行文件下载,并通过 PowerShell 调用 Python 脚本。

powershell
python -c "import requests; r = requests.get('https://example.com/file.zip'); open('C:\\path\\to\\save\\file.zip', 'wb').write(r.content)"
  • 优点:适用于需要在 PowerShell 中执行 Python 脚本的场景,尤其是 Python 更适合处理复杂的文件下载任务。

6. 通过 CURL 在 PowerShell 中下载(适用于 HTTP/HTTPS)

Windows 系统默认提供了 curl 工具,可以直接在 PowerShell 中调用进行文件下载。

powershell
curl -o "C:\path\to\save\file.zip" "https://example.com/file.zip"
  • 优点:curl 语法简洁,支持丰富的功能,适用于 HTTP 和 HTTPS 下载。

7. 通过 Start-Process 运行外部下载工具

如果你已经安装了外部下载工具(例如 aria2c 或 wget),你可以通过 Start-Process 来调用它们下载文件。

powershell
Start-Process "aria2c" -ArgumentList "https://example.com/file.zip", "-d", "C:\path\to\save"
  • 优点:可以利用外部工具的高效下载功能,比如 aria2 支持多线程下载。

8. 通过 Get-Content 和 Out-File 实现下载(适用于文本数据)

如果需要下载文本数据(例如 JSON、CSV 等格式),可以利用 Get-Content 来读取内容,然后使用 Out-File 保存。

powershell
$uri = "https://example.com/data.json"
$contents = Get-Content -Uri $uri
$contents | Out-File "C:\path\to\save\data.json"
  • 优点:适用于文本文件下载,尤其是 JSON 或 XML 数据。

9. 通过 StreamReader 和 StreamWriter 下载(适用于大文件流)

如果文件比较大,建议使用流操作来逐块下载,避免一次性加载整个文件。

powershell
$uri = "https://example.com/largefile.zip"
$webRequest = [System.Net.WebRequest]::Create($uri)
$response = $webRequest.GetResponse()
$stream = $response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($stream)
$writer = New-Object System.IO.StreamWriter("C:\path\to\save\largefile.zip")

while ($line = $reader.ReadLine()) {
    $writer.WriteLine($line)
}

$writer.Close()
$reader.Close()
$stream.Close()
  • 优点:适用于大文件下载,可以逐块处理,避免内存占用过大。

更高级的下载方式,下面列出几种可选方案:

1. 通过 PowerShell 使用 Invoke-RestMethod

Invoke-RestMethod 是 PowerShell 中的一个命令,可以用来处理 REST API 的请求和响应,通常适用于下载 API 返回的数据或文件。

powershell
Invoke-RestMethod -Uri "https://example.com/file.zip" -OutFile "C:\path\to\save\file.zip"
  • 优点:简洁,适用于需要处理 HTTP 请求和响应的场景。

2. 通过 System.Net.FtpWebRequest 下载文件(FTP 协议)

你可以使用 FtpWebRequest 来处理 FTP 协议的下载,适合更复杂的 FTP 文件管理。

powershell
$ftpUrl = "ftp://example.com/file.zip"
$localFile = "C:\path\to\save\file.zip"
$ftpRequest = [System.Net.FtpWebRequest]::Create($ftpUrl)
$ftpRequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
$ftpRequest.Credentials = New-Object System.Net.NetworkCredential("username", "password")
$ftpResponse = $ftpRequest.GetResponse()
$ftpStream = $ftpResponse.GetResponseStream()
$fileStream = New-Object System.IO.FileStream($localFile, [System.IO.FileMode]::Create)

$buffer = New-Object byte[] 1024
while ($bytesRead = $ftpStream.Read($buffer, 0, $buffer.Length)) {
    $fileStream.Write($buffer, 0, $bytesRead)
}
$fileStream.Close()
$ftpStream.Close()
  • 优点:适用于通过 FTP 协议进行复杂文件管理。

3. 通过 DownloadFileAsync 异步下载(非阻塞操作)

当需要在下载的同时进行其他任务时,可以使用异步方法 DownloadFileAsync。

powershell
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFileAsync("https://example.com/file.zip", "C:\path\to\save\file.zip")
  • 优点:下载过程不会阻塞其他操作,适合多任务处理。

4. 通过 Start-Process 调用外部下载工具

如果你喜欢使用其他下载工具,可以通过 Start-Process 调用它们。

powershell
Start-Process "wget" -ArgumentList "https://example.com/file.zip", "-O", "C:\path\to\save\file.zip"
  • 优点:利用外部工具,如 wget、curl、aria2 等,支持更多高级特性。

5. 使用 Invoke-WebRequest 搭配认证

如果文件需要身份验证,可以在 Invoke-WebRequest 中添加认证信息。

powershell
$headers = @{Authorization=("Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("username:password")))}
Invoke-WebRequest -Uri "https://example.com/protectedfile.zip" -Headers $headers -OutFile "C:\path\to\save\file.zip"
  • 优点:支持基本的 HTTP 认证,适用于需要认证的文件下载。

6. 通过 HttpListener 启动 HTTP 服务器并提供文件下载

如果你想自己提供文件下载服务,可以通过 HttpListener 创建一个简单的 HTTP 服务器,供其他机器下载文件。

powershell
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:8080/")
$listener.Start()

while ($true) {
    $context = $listener.GetContext()
    $filePath = "C:\path\to\file.zip"
    $file = [System.IO.File]::OpenRead($filePath)
    $response = $context.Response
    $response.ContentType = "application/zip"
    $response.ContentLength64 = $file.Length
    $file.CopyTo($response.OutputStream)
    $response.Close()
}
  • 优点:通过本地 HTTP 服务,适合自建下载服务器。

7. 通过 WebClient 结合代理服务器下载

如果下载文件时需要使用代理,可以通过设置代理服务器进行下载。

powershell
$proxy = New-Object System.Net.WebProxy("http://proxyserver:8080")
$webclient = New-Object System.Net.WebClient
$webclient.Proxy = $proxy
$webclient.DownloadFile("https://example.com/file.zip", "C:\path\to\save\file.zip")
  • 优点:适用于需要通过代理进行下载的场景。

8. 通过 HttpWebRequest 设置自定义请求头

如果需要下载时定制请求头(例如设置 User-Agent),可以使用 HttpWebRequest 来实现。

powershell
$uri = "https://example.com/file.zip"
$request = [System.Net.HttpWebRequest]::Create($uri)
$request.Headers.Add("User-Agent", "Mozilla/5.0")
$response = $request.GetResponse()
$stream = $response.GetResponseStream()
$fs = New-Object System.IO.FileStream("C:\path\to\save\file.zip", [System.IO.FileMode]::Create)
$buffer = New-Object byte[] 1024

while (($read = $stream.Read($buffer, 0, $buffer.Length)) -gt 0) {
    $fs.Write($buffer, 0, $read)
}
$fs.Close()
$stream.Close()
  • 优点:适用于需要自定义请求头的高级用例。

9. 通过 Out-File 和 Invoke-WebRequest 下载文本

对于文本文件或其他非二进制文件,可以直接将下载内容输出到文件。

powershell
Invoke-WebRequest -Uri "https://example.com/data.json" | Out-File "C:\path\to\save\data.json"
  • 优点:适用于文本文件下载,如 JSON 或 XML 文件。

这些方法可以帮助你在 PowerShell 中实现更为灵活和高效的文件下载。

 

一个实用、安全、可复用的 PowerShell 模块,封装了 Windows 下常见的文件下载方法(支持多种后端:Invoke-WebRequest、WebClient、BITS、certutil),并包含进度显示、错误处理、哈希校验等企业级功能。


📦 模块名称:DownloadUtils.psm1

powershell
编辑
 
 
# DownloadUtils.psm1
# 用途:提供统一接口下载文件,自动选择最优后端
# 作者:闪现
# 版本:1.0

function Test-CommandExists {
    param([string]$cmd)
    return [bool](Get-Command $cmd -ErrorAction SilentlyContinue)
}

function Get-TempFilePath {
    param([string]$Extension = ".tmp")
    return [System.IO.Path]::GetTempFileName() -replace '\.tmp$', $Extension
}

function Invoke-FileDownload {
    <#
    .SYNOPSIS
        下载文件到指定路径,支持多种后端和校验。
    .PARAMETER Uri
        要下载的文件 URL(必填)
    .PARAMETER OutFile
        保存路径(必填)
    .PARAMETER Hash
        可选:预期文件的 SHA256 哈希值(用于校验完整性)
    .PARAMETER Method
        可选:强制使用特定后端 ('WebRequest', 'WebClient', 'BITS', 'CertUtil')
    .PARAMETER UseBasicParsing
        是否使用基本解析(避免 IE 引擎依赖,默认 $true)
    .EXAMPLE
        Invoke-FileDownload -Uri "https://example.com/app.exe" -OutFile "C:\temp\app.exe" -Hash "a1b2c3..."
    #>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)][string]$Uri,
        [Parameter(Mandatory)][string]$OutFile,
        [string]$Hash,
        [ValidateSet('WebRequest', 'WebClient', 'BITS', 'CertUtil')][string]$Method,
        [switch]$UseBasicParsing = $true
    )

    # 确保输出目录存在
    $outDir = [System.IO.Path]::GetDirectoryName($OutFile)
    if (!(Test-Path $outDir)) { New-Item -ItemType Directory -Path $outDir -Force | Out-Null }

    # 自动选择后端(优先级:WebRequest > WebClient > BITS > CertUtil)
    $availableMethods = @()
    if (!$Method) {
        if ($PSVersionTable.PSVersion.Major -ge 3) { $availableMethods += 'WebRequest' }
        $availableMethods += 'WebClient'
        if (Get-Service -Name BITS -ErrorAction SilentlyContinue | Where-Object Status -eq Running) { $availableMethods += 'BITS' }
        if (Test-CommandExists certutil) { $availableMethods += 'CertUtil' }
        $Method = $availableMethods[0]
        Write-Verbose "Auto-selected download method: $Method"
    }

    $tempFile = Get-TempFilePath -Extension ([System.IO.Path]::GetExtension($OutFile))

    try {
        switch ($Method) {
            'WebRequest' {
                Write-Progress -Activity "Downloading via Invoke-WebRequest" -Status $Uri
                $params = @{
                    Uri         = $Uri
                    OutFile     = $tempFile
                    ErrorAction = 'Stop'
                }
                if ($UseBasicParsing) { $params.UseBasicParsing = $true }
                Invoke-WebRequest @params
            }
            'WebClient' {
                Write-Progress -Activity "Downloading via WebClient" -Status $Uri
                $wc = New-Object System.Net.WebClient
                try {
                    $wc.DownloadFile($Uri, $tempFile)
                } finally {
                    $wc.Dispose()
                }
            }
            'BITS' {
                Write-Progress -Activity "Downloading via BITS (Background Intelligent Transfer Service)" -Status $Uri
                $jobName = "DownloadJob_$(Get-Date -Format 'yyyyMMddHHmmss')"
                Start-BitsTransfer -Source $Uri -Destination $tempFile -DisplayName $jobName -ErrorAction Stop
            }
            'CertUtil' {
                Write-Progress -Activity "Downloading via certutil (fallback method)" -Status $Uri
                # certutil 会缓存,但我们可以复制出来
                $cacheFile = "$env:LOCALAPPDATA\Microsoft\CryptnetUrlCache\Content\$([System.IO.Path]::GetFileName($tempFile))"
                certutil -urlcache -split -f $Uri $tempFile | Out-Null
                # 注意:某些系统 certutil 直接输出到 $tempFile,无需额外操作
                if (Test-Path $cacheFile) {
                    Copy-Item $cacheFile $tempFile -Force
                }
            }
            default {
                throw "Unsupported download method: $Method"
            }
        }

        # 校验哈希(如果提供)
        if ($Hash) {
            Write-Verbose "Verifying file hash..."
            $actualHash = (Get-FileHash -Path $tempFile -Algorithm SHA256).Hash
            if ($actualHash -ne $Hash.ToUpper()) {
                throw "Hash mismatch! Expected: $Hash, Actual: $actualHash"
            }
        }

        # 移动到最终位置
        Move-Item -Path $tempFile -Destination $OutFile -Force
        Write-Host "✅ Download completed: $OutFile" -ForegroundColor Green

    } catch {
        if (Test-Path $tempFile) { Remove-Item $tempFile -Force }
        Write-Error "Download failed: $_"
        throw
    } finally {
        Write-Progress -Activity "Downloading" -Completed
    }
}

# 导出函数
Export-ModuleMember -Function Invoke-FileDownload

📁 模块部署方式

  1. 创建模块目录(如未存在):

    powershell
    编辑
     
     
    $modulePath = "$env:USERPROFILE\Documents\PowerShell\Modules\DownloadUtils"
    New-Item -ItemType Directory -Path $modulePath -Force
  2. 保存上述代码为 DownloadUtils.psm1 到该目录

  3. 导入模块:

    powershell
    编辑
     
     
    Import-Module DownloadUtils
  4. 使用示例:

    powershell
    编辑
     
     
    # 基础下载
    Invoke-FileDownload -Uri "https://github.com/.../tool.zip" -OutFile "C:\Tools\tool.zip"
    
    # 带哈希校验(推荐用于生产环境)
    Invoke-FileDownload -Uri "https://example.com/app.exe" -OutFile "C:\app.exe" -Hash "A1B2C3D4..."
    
    # 强制使用 BITS(适合大文件后台下载)
    Invoke-FileDownload -Uri "http://large.file.iso" -OutFile "D:\large.iso" -Method BITS

✅ 模块优势

特性 说明
自动降级 若首选方法不可用(如 PowerShell < 3.0),自动尝试其他方式
临时文件安全 下载到临时路径,校验通过后再移动,避免部分写入污染
进度提示 使用 Write-Progress 提供可视化反馈
哈希校验 防止下载被篡改或损坏
错误隔离 失败时清理临时文件,不留下垃圾
兼容性强 支持 PowerShell 2.0+(WebClient 路径)到最新版

🔒 安全建议

  • 永远不要在脚本中硬编码密码。如需认证,使用 -Credential 参数(可扩展支持)。
  • 对于高敏感环境,建议结合 数字签名验证(如 Get-AuthenticodeSignature)。
  • 在受限环境中,certutil 和 bitsadmin 常被允许,而 PowerShell 可能被禁用——本模块可配合策略灵活切换。

在 CMD 命令行环境下,基于 Rust 和 Python 开发的下载工具近年来非常流行,因为它们通常比传统的工具(如旧版 wget)更快、更现代,且支持断点续传和多线程。
以下是目前最主流的工具推荐:

一、Rust 编写的下载工具(主打:极速、多线程、现代)

Rust 编写的工具通常以单文件 executable 形式存在,无需安装环境,下载后直接在 CMD 运行即可,速度极快。

1. Aria2 (虽然不是 Rust 写的,但常被 Rust 工具替代) -> 替代品:aria2c 的 Rust 实现或 xget

实际上,目前 Rust 界最火的通用下载器是 aria2 的现代化替代品或封装,但最纯粹的 Rust 下载器是:

2. xget (强烈推荐)

  • 特点:用 Rust 编写,支持多线程、断点续传,界面友好(带有进度条),速度非常快。
  • 适用场景:通用 HTTP/HTTPS 文件下载。
  • CMD 用法:
    xget https://example.com/file.zip
  • 获取方式:在 GitHub Release 页面下载 .exe 文件。

3. rust-dl / downloader (泛指类)

有很多小型的 Rust 下载器,但最成熟的功能集合体往往是 aria2 (C++写但标配) 或者 motr。
注:目前 Rust 生态中,最强大的其实是 just (任务运行器) 配合脚本,或者专门的视频下载器。

4. youtube-dl 的 Rust 重写版:yt-dlp (Python) 的竞争对手 -> tube 或 ytdl-rs

如果你主要下载视频:
  • 工具名:tube 或 ytdl-rs
  • 特点:比 Python 版的 youtube-dl 启动速度快几十倍,无依赖。
  • CMD 用法:
    tube https://www.youtube.com/watch?v=xxxx

5. rustcat / rcp (简单传输)

  • 用于简单的文件传输,类似 netcat 但更安全快速。

二、Python 编写的下载工具(主打:功能强大、脚本化、视频专用)

Python 工具通常需要安装 Python 环境,但现在很多也提供了打包好的 .exe 版本。

1. yt-dlp (视频下载神器,必装)

  • 地位:目前全球最强的命令行视频下载工具,是 youtube-dl 的活跃分支。
  • 语言:Python。
  • 特点:支持全球数千个视频网站,可下载最高画质、字幕、播放列表,速度极快。
  • CMD 用法:
    yt-dlp -f best https://www.youtube.com/watch?v=xxxx
  • 注意:虽然有 Python 源码,但建议直接下载 yt-dlp.exe (已打包),这样不需要安装 Python 即可在 CMD 运行。

2. wget / curl (Python 脚本版)

虽然系统自带 curl,但 Python 有一些增强版脚本,不过通常直接用系统自带的更高效。

3. pipx 运行的临时下载脚本

你可以不安装,直接通过 Python 运行一些下载逻辑,但这通常不如编译型语言方便。

三、特别提及:Rust 编写的 Python 包管理下载加速工具

既然你提到了 Rust 和 Python,不得不提 uv。
  • 工具名:uv
  • 语言:Rust。
  • 用途:它不是用来下载普通文件的,而是用来极速下载 Python 包 (pip) 和管理 Python 版本的。
  • 为什么提它:它比传统的 pip 快 10-100 倍,彻底解决了 Python 下载依赖慢的问题。
  • CMD 用法:
    uv pip install requests

总结与推荐方案

需求场景 推荐工具 语言 优点 下载建议
通用文件下载 (HTTP/HTTPS) xget 或 aria2c Rust / C++ 多线程、断点续传、极速 下载单文件 .exe 放入系统路径
视频/音频下载 yt-dlp Python (有.exe版) 支持站点最多、功能最强 下载 yt-dlp.exe
Python 包/环境管理 uv Rust 比 pip 快百倍、一体化管理 通过 powershell/cmd 一键安装
简单快速测试 curl (系统自带) C 无需安装、系统内置 直接使用

如何在 CMD 中开始使用?

  1. 对于 yt-dlp (视频):
    • 访问 GitHub 搜索 yt-dlp releases。
    • 下载 yt-dlp.exe。
    • 将其移动到 C:\Windows\System32 或任意你在 PATH 中的文件夹。
    • 打开 CMD 输入 yt-dlp --version 验证。
  2. 对于 xget (通用文件):
    • 访问 GitHub 搜索 xget rust (注意甄别,因为同名项目多,推荐找 star 高的如 XGET by varun-raj 或类似项目)。
    • 备选方案:如果找不到满意的纯 Rust 通用下载器,aria2c (虽不是 Rust 但是标准) 依然是王道,或者使用 motr。
    • 更正:目前 Rust 生态中有一个非常流行的叫 downloader 或者 fetch 的 CLI 工具,但最稳定的建议还是使用 aria2 (配置好并发) 或者尝试 rust-get 类项目。
最实用的组合建议:
在 CMD 中保留 curl (系统自带) 处理小文件,安装 yt-dlp.exe 处理视频,安装 uv (Rust 编写) 来管理所有 Python 相关的下载需求。

 

posted @ 2024-11-24 15:54  suv789  阅读(11544)  评论(0)    收藏  举报