如何在带有用户名和密码的 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
我在 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 : 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