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

6
我看到了一些关于SO的答案,例如这个这个。但我总是会得到类似以下错误的一些错误。
不确定我做错了什么。我尝试了以下几种变化,但都给出了类似的错误。请帮忙。
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 : 找不到可以接受参数'--password=MyWhatEver@pas$w0rd'的位置参数。
位于第1行第1个字符:
+ wget --user='My.UserName@gmail.com' --password='MyWhatEver@pas$w0rd'  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
注意: "wget" 命令在 PowerShell 中不可用,需要使用 "Invoke-WebRequest"。
1个回答

8
看起来您实际上想运行程序wget.exe,但是PowerShell有一个内置别名wget用于cmdlet Invoke-WebRequest,即使可执行文件在PATH中,该别名也会优先执行。该cmdlet没有--user--password参数,这就是导致您观察到的错误的原因。
您可以通过添加扩展名来强制运行可执行文件,以便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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接