如何在Powershell中用cURL单行命令下载并直接运行exe文件
命令失效原因
- 管道后的单独
-没有对应可执行程序处理输入:python -里的-是Python解释器约定的特殊参数,代表从标准输入读取脚本内容执行,但不存在默认的系统程序会识别单独的-参数、从标准输入读取内容运行EXE - EXE本身的运行逻辑不支持从标准输入加载:Windows下的EXE是PE格式二进制文件,系统进程加载器需要读取完整的PE头、分段映射等信息,必须从磁盘文件读取加载,不能直接从标准输入的流中启动运行,和Python这类解释型程序读取文本流执行的逻辑完全不同
- 若未单独安装原生curl,Powershell中默认的
curl是Invoke-WebRequest的别名,行为和Linux原生curl不一致,也会导致管道处理不符合预期
Powershell单行实现下载并直接运行EXE的方法
由于EXE必须落地到磁盘才能被系统加载运行,单行命令需要先将下载的二进制内容存入临时文件再执行,两种可用写法如下:
- 已安装原生curl的环境使用:
curl.exe -o $env:TEMP\app.exe https://linktoexe/app.exe ; Start-Process $env:TEMP\app.exe
- 无需额外安装curl,直接用Powershell内置命令实现:
iwr https://linktoexe/app.exe -o $env:TEMP\app.exe ; saps $env:TEMP\app.exe
说明:
iwr是Invoke-WebRequest的别名,saps是Start-Process的别名;如果需要等待程序执行完成后再返回终端,可以给Start-Process添加-Wait参数。
内容的提问来源于stack exchange,提问作者Psuedodoro
相关产品推荐
相关产品推荐

