Question:
I have seen couple of answers on SO like this and this. But I always get some error similar to the following.
Not sure what am I doing wrong. I tried with the following variations, but all giving similar error. Please help.
1 2 3 4 5 |
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 |
1 2 3 4 5 6 7 |
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 |
Answer:
It looks like you actually want to run the program wget.exe
, but PowerShell has a builtin alias wget
for the cmdlet Invoke-WebRequest
that takes precedence over an executable, even if the executable is in the PATH
. That cmdlet doesn’t have parameters --user
or --password
, which is what causes the error you observed.
You can enforce running the executable by adding its extension, so PowerShell doesn’t confuse it with the alias:
1 2 |
wget.exe --user 'My.UserName@gmail.com' --password 'MyWhatEver@pas$w0rd' https://bitbucket.org/WhatEver/WhatEverBranchName/get/master.zip |
Note that you should put string literals with special characters like $
in single quotes, otherwise PowerShell would expand something like "MyWhatEver@pas$w0rd"
to "MyWhatEver@pas"
, because the variable $w0rd
is undefined.
If you want to use the cmdlet Invoke-WebRequest
rather than the wget
executable you need to provide credentials via a PSCredential
object:
1 2 3 4 5 6 7 |
$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 |