我有一个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"}
谢谢您的指点或帮助!
答案 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参数。
警告:不建议使用此参数,不建议这样做。它 仅用于与不能兼容的旧系统兼容 提供加密的连接。按自己的风险使用