【问题标题】:Capture curl "log" and store in a variable on PowerShell捕获 curl“日志”并存储在 PowerShell 上的变量中
【发布时间】:2020-07-11 13:36:10
【问题描述】:

我在 PowerShell 上运行这个 curl 命令。

curl.exe -0 -v --cert $cert --key $key --cacert $cacert GET $URIString

当一切正常时我能够得到输出,但我想得到它的“日志”,例如

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0* Could not resolve host: GET
* Closing connection 0
curl: (6) Could not resolve host: GET
*   Trying XXX.XXX.XXX.XXX...
* TCP_NODELAY set
* Connected to xxxxxxxxxx (XXX.XXX.XXX.XXX) port 443 (#1)
* ALPN, offering http/1.1
* unable to set private key file: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' type PEM
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 1
curl: (58) unable to set private key file: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' type PEM 

这是用于错误处理的。

【问题讨论】:

    标签: powershell curl


    【解决方案1】:

    从 PowerShell 调用外部程序时,您可能希望使用 Start-Process cmdlet 对其进行一些控制。例如,您可以评估退出代码。此外,您还可以访问其标准输出流,而且——我认为这对你来说更重要——它的标准错误流。如果你这样调用 curl:

    Start-Process curl -ArgumentList "-0 -v --cert $cert --key $key --cacert $cacert GET $URIString" -Wait -RedirectStandardOutput $env:USERPROFILE\Desktop\stdout.txt -RedirectStandardError $env:USERPROFILE\Desktop\stderr.txt
    

    您可以随后评估两个流,stdoutstderr

    如果你还想检查退出代码,你可以这样调用 curl:

    $process = Start-Process curl -ArgumentList "-0 -v --cert $cert --key $key --cacert $cacert GET $URIString" -Wait -RedirectStandardOutput $env:USERPROFILE\Desktop\stdout.txt -RedirectStandardError $env:USERPROFILE\Desktop\stderr.txt -PassThru
    Write-Host "Exit code: $($process.ExitCode)"
    

    【讨论】:

      【解决方案2】:

      很遗憾,我也找不到好的解决方案。 我唯一能捕捉到的是 HTML 输出,我猜你得到的也是一样的。

      也许你可以试试 PowerShell 的原生 Invoke-Webrequest 命令。 但是它不支持像 curl 那么多的选项,所以也许你需要做一些修改。 This question 例如显示如何替换 --cacert 标志。根据this answer--key 标志和--cert 可以替换为 PFX 文件。 其他一切都应该有原生支持。

      有了这个,您可以通过将其保存到变量或将其输出到文件来获取 powershell 命令的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多