我在this和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
答案 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