捕获curl“日志”并将其存储在PowerShell上的变量中

aelbi1ox  于 2022-11-13  发布在  Shell
关注(0)|答案(2)|浏览(212)

我在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

这用于错误处理。

rfbsl7qr

rfbsl7qr1#

当从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)"
ukxgm1gy

ukxgm1gy2#

不幸的是,我也找不到一个好的解决方案。我唯一能捕获的是HTML输出,我猜你也得到了同样的结果。
也许你可以尝试PowerShell的原生Invoke-Webrequest命令。但是它不像curl那样支持那么多选项,所以你可能需要做一些修改。例如This question显示了如何替换--cacert标志。--key标志和--cert可以用一个PFX文件替换,根据this answer。其他的都应该有原生支持。
使用此命令,您可以通过将powershell命令的输出保存到一个变量或输出到一个文件来获取它。

相关问题