首页 > 解决方案 > 如何在 PowerShell 中将 curl 结果作为变量获取

问题描述

使用 Powershell,我想运行以下命令并将其存储status_url为变量。我无法status_url直接引用。

$upload = curl.exe -u username:password -i -F filedata=@filename.csv https://sitename.com/csv

$upload存储以下信息:

PS C:\Scripts> $upload HTTP/2 200 内容类型:文本/html;charset=utf-8 严格传输安全:max-age=31536000;includeSubDomains content-security-policy: script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdnjs.cloudflare.com https://cdn.ravenjs.com https://cdn.mxpnl.com https://ssl.google-analytics.com https: // .googleapis.com https://cdn.segment.com https://d2yyd1h5u9mauk.cloudfront.net https:// .typeform.com;connect-src 'self' https://api.mixpanel.com https://web.delighted.com https://a pi.segment.io;object-src 'self';style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com https://使用。 https://fonts.gstatic.com https://fonts.googleapis.com;font-src 'self' https://cdnjs.cloudflare.com https://use.fontawesome.com https://fonts.gstatic .com;x-xss-保护:1;mode=block x-content-type-options: nosniff referrer-policy: strict-origin set-cookie: session=d9337cbf2c313e12_5c24fe8c.Bg33P1e8TOQs9sDCpRWwOoSDDao; 域=.rolepoint-qa.com;安全的; 仅http;路径=/ x-cloud-trace-context:2586e15ea742ba3202516d6c9c58d3d2;o=1 日期:2018 年 12 月 27 日星期四 16:32:12 GMT 服务器:Google 前端内容长度:94 到期:2018 年 12 月 27 日星期四 16:32:12 GMT 缓存控制:私有

{“结果”:{“status_url”:“ https://sitename.com/csv/v1/status/1234567 ”}}

我怎样才能引用它status_url本身,以便我可以在 GET 中使用它来检查上传状态?

输出是 JSON,我需要解析 $upload 还是有办法引用$upload.status_url

标签: powershellvariablescurl

解决方案


我认为($upload | ConvertFrom-Json).result.status_url由于 -i 参数而无法正常工作,它将响应正文与标头混合在一起,因此您没有获得有效的 json。删除它可以吗?如果您需要保留它,则可能使用 Invoke-Webrequest 代替。您可以尝试下面的代码(我无法测试)。如果它正常工作,那么只需浏览 $response 对象(响应正文将在 $response.Content 中)。

$password = ConvertTo-SecureString "yourpassword" -AsPlainText -Force
$user = "yourUser"

$params = @{ 
 Uri = "https://sitename.com/csv"
 InFile = "path/to/your/file.csv"
 Method = "Post"
 Credential = [PSCredential]::new($user, $password)
 }

$response = Invoke-Webrequest @params

您还可以尝试使用正则表达式从混合响应中提取该 url,例如:

$Upload -match 'https://sitename.com/csv/v1/status/\d*'
$Matches[0]

推荐阅读