首页 > 解决方案 > 为 PowerShell Invoke-WebRequest 重写 Unix Curl 命令

问题描述

我有一个 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"}

感谢您的任何指点或帮助!

标签: powershellunixcmdscripting

解决方案


对我来说,看起来你的错误是你的-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,否则根据文档它总是会失败:

允许通过未加密的连接发送凭据和机密。默认情况下,使用不以 https:// 开头的 -Uri 提供 -Credential 或任何 -Authentication 选项将导致错误,并且请求将中止,以防止无意中通过未加密的连接以纯文本形式通信秘密。要覆盖此行为,风险自负,请提供 -AllowUnencryptedAuthentication 参数。

警告:使用此参数不安全,不推荐使用。提供它只是为了与无法提供加密连接的旧系统兼容。使用风险自负

MS Docs 上 cmdlet 文档的链接


推荐阅读