【问题标题】:Rewriting Unix Curl Commands for PowerShell Invoke-WebRequest为 PowerShell Invoke-WebRequest 重写 Unix Curl 命令
【发布时间】:2019-01-02 13:35:55
【问题描述】:

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

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

【问题讨论】:

  • Body 可以采用hashtable,因此无需手动形成自己的 JSON。但是,您得到的是身份验证错误。您的端点是否需要某种标头身份验证?

标签: powershell unix cmd scripting


【解决方案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

【讨论】:

  • 好收获。为了缩短输入量,您还可以使用-Credential (Get-Credential -Credential user),然后会提示您输入密码。
  • 谢谢 Henrik 和 @theIncorrigible1 我仍然收到“用户无法通过身份验证”错误...这是提供凭据的方式与 -u 在 unix 中的方式相同吗?
  • @EmaNekaf 取决于您的端点对身份验证的期望。
  • 刚刚更新了我的答案,如果你的端点不是 https,你也需要告诉 powershell,否则它总是会失败。
  • 非常感谢两位,我认为是我的访问权限有问题
猜你喜欢
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2019-03-21
相关资源
最近更新 更多