如何在带有用户名和密码的 PowerShell 控制台中使用 wget

How to use wget in PowerShell console with username and password

我在 SO 上看到了几个答案,比如 and this。但是我总是得到一些类似下面的错误。

不确定我做错了什么。我尝试了以下变体,但都给出了类似的错误。请帮忙。

wget --user "My.UserName@gmail.com" --password "MyWhatEver@pas$w0rd" https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip
wget --user="My.UserName@gmail.com" --password="MyWhatEver@pas$w0rd" https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip
wget --user='My.UserName@gmail.com' --password='MyWhatEver@pas$w0rd' https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip
wget --user My.UserName@gmail.com --password MyWhatEver@pas$w0rd https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip
Invoke-WebRequest : A positional parameter cannot be found that accepts argument
'--password=MyWhatEver@pas$w0rd'.
At line:1 char:1
+ wget --user='My.UserName@gmail.com' --password='MyWhatEver@pas$w0rd'  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

看起来您实际上想要 运行 程序 wget.exe, but PowerShell has a builtin alias wget for the cmdlet Invoke-WebRequest that takes precedence 覆盖可执行文件,即使可执行文件位于 PATH 中。该 cmdlet 没有参数 --user--password,这是导致您观察到的错误的原因。

您可以通过添加扩展名来强制执行 运行ning 可执行文件,因此 PowerShell 不会将其与别名混淆:

wget.exe --user 'My.UserName@gmail.com' --password 'MyWhatEver@pas$w0rd' https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip

请注意,您应该将带有 $ 等特殊字符的字符串文字放在单引号中,否则 PowerShell 会将 "MyWhatEver@pas$w0rd" 扩展为 "MyWhatEver@pas",因为变量 $w0rd 未定义。

如果您想使用 cmdlet Invoke-WebRequest 而不是 wget 可执行文件,您需要通过 PSCredential 对象提供凭据:

$uri  = 'https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip'
$user = 'My.UserName@gmail.com'
$pass = 'MyWhatEver@pas$w0rd' | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential ($user, $pass)

Invoke-WebRequest -Uri $uri -Credential $cred