如何使用 Powershell 从 sourceforge 下载文件?

rov*_*vda 0 powershell sourceforge invoke-webrequest

我正在尝试使用 powershell 在几台计算机中自动更新 KeePass,因此我对某种从 sourceforge 自动下载最新版本的方法感兴趣,但是我无法使其工作。我通过谷歌搜索看到了很多参考资料,但没有一个对我有用。我目前正在尝试这个:

$url=https://sourceforge.net/projects/keepass/files/latest/download
#$url=https://sourceforge.net/projects/keepass/files/KeePass%202.x/2.49/KeePass-2.49-Setup.exe

Invoke-WebRequest -Uri $url -OutFile $env:USERPROFILE'\Downloads\KeePass2-Latest.exe'
Run Code Online (Sandbox Code Playgroud)

这两者都下载网络的页面文件,而不是安装程序本身。

根据此 Sourceforge 帖子“只要下载功能能够遵循重定向,并且看起来不是浏览器源(例如,没有类似浏览器的用户代理字符串),常规下载链接就可以工作),它只会重定向到文件本身。 ”

然而它对我不起作用,我没有指定任何 UserAgent,我什至尝试将其用作-UserAgent $null参数,但没有成功。

有没有办法使用命令行/Powershell 以编程方式从 sourceforge 下载?

sta*_*tor 7

根据文档,默认的用户代理Invoke-WebRequest类似于:

\n
\n

Mozilla/5.0 (Windows NT 10.0; Microsoft Windows 10.0.15063; en-US) PowerShell/6.0.0

\n
\n

这可能会被SourceForge解释为浏览器用户代理,因此可能不适合立即重定向。

\n

SourceForge 的文档指出,他们提供直接下载,wget例如使用时:

\n
\n

我们还有一个特殊的“最新/下载”URL,有点像 Google 的“手气不错”下载按钮:

\n
$ wget https://sourceforge.net/projects/phppgadmin/files/latest/download\n
Run Code Online (Sandbox Code Playgroud)\n

如果您使用它,我们\xe2\x80\x99将尝试向您发送最新的下载。Wget(和类似的工具)使得确定您\xe2\x80\x99是否在Windows、Mac、Linux等上变得有点棘手。如果您\xe2\x80\x99正在下载\xe2\x80\x99s操作系统的东西-具体您\xe2\x80\x99最好使用完整的 URL。

\n
\n

默认的用户代理wget如下所示,其中数字代表当前版本wget:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
操作系统用户代理
视窗Wget/1.21.1
LinuxWget/1.21.1 (linux-gnu)
\n
\n

使用Wget用户代理就足以直接下载可执行文件:

\n
Invoke-WebRequest -UserAgent "Wget" -Uri https://sourceforge.net/projects/keepass/files/latest/download -OutFile $env:USERPROFILE\'\\Downloads\\KeePass2-Latest.exe\'\n
Run Code Online (Sandbox Code Playgroud)\n

由于 KeePass 只提供 Windows 可执行文件,因此您不必担心 Linux 或 macOS 二进制文件/包。

\n

  • 这感觉更像是一种解决方法,但它确实有效,所以我不会抱怨!万分感谢! (2认同)