重写用于PowerShell Invoke-WebRequest

时间:2018-07-25 16:39:53

标签: powershell unix cmd scripting

我有一个unix cmd,需要重写才能在Windows PowerShell中获得相同的结果。我特别被困在登录名上...

原始Unix命令:

curl -u user:xxxx -X POST -s --data '{"one" : "one/text","two" : "two/text"}', http://myurl.net/run

我尝试的转换:

$params = '{"one" : "one/text","two" : "two/text"}'
Invoke-WebRequest -Uri http://myurl.net/run -Credential user:xxxx -Method POST -Body $params

现在,我得到了错误:

Invoke-WebRequest : {"mimetype":[{"stderr":"text/plain"}],"streamdata":[{"stderr":"User cannot be authenticated"}],"status":"error"}

谢谢您的指点或帮助!

1 个答案:

答案 0 :(得分:1)

在我看来,您的错误在于您的-Credential参数。
这需要一个凭据对象,而不是字符串。

尝试:

$Credential = Get-Credential
$params = '{"one" : "one/text","two" : "two/text"}'
Invoke-WebRequest -Uri http://myurl.net/run -Credential $Credential -Method POST -Body $params

Get-Credential命令将提示您输入用户名和密码。

此外,如果您的端点不是https,那么您需要使用以下参数-AllowUnencryptedAuthentication告诉Powershell,否则根据文档它将始终失败:

  

允许通过未加密的方式发送凭据和机密   连接。默认情况下,提供-Credential或任何-Authentication   不以https://开头的-Uri选项将导致   错误,请求将中止以防止意外   通过未加密的连接以纯文本形式传达秘密。至   请自行承担改写此行为的风险,请提供   -AllowUnencryptedAuthentication参数。

     

警告:不建议使用此参数,不建议这样做。它   仅用于与不能兼容的旧系统兼容   提供加密的连接。按自己的风险使用

The link to the cmdlet documentation on MS Docs