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

时间:2016-10-01 13:39:44

标签: powershell wget

我在thisthis上看过几个答案。但我总是得到一些类似于以下的错误。

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

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

1 个答案:

答案 0 :(得分:2)

看起来您实际上想要运行程序wget.exe,但PowerShell有一个cmdlet Invoke-WebRequest的内置别名wget,它可以precedence覆盖可执行文件,甚至如果可执行文件在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
相关问题