Захват завиток "log" и сохранение в переменной на PowerShell - PullRequest
0 голосов
/ 31 марта 2020

Я запускаю эту команду curl на PowerShell.

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 

Это для обработки ошибок .

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

При вызове внешних программ из PowerShell вы можете использовать командлет Start-Process, чтобы получить некоторый контроль над ним. Вы можете оценить код выхода, например. Более того, вы получаете доступ к его стандартному выходному потоку и - я думаю, что это более важно для вас - к его стандартному потоку ошибок. Если вы называете 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

, вы можете впоследствии оценить оба потока, stdout и stderr.

Если вы также хотите проверить код выхода, вы можете позвонить завиток так:

$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)"
0 голосов
/ 31 марта 2020

К сожалению, я тоже не смог найти хорошего решения. Единственное, что я могу записать - это вывод HTML, и я думаю, вы получаете то же самое.

Возможно, вы могли бы попробовать встроенную команду PowerShell Invoke-Webrequest. Однако он не поддерживает столько опций, как curl, поэтому, возможно, вам придется немного поработать. Этот вопрос , например, показывает, как заменить флаг --cacert. Флаг --key и --cert можно заменить файлом PFX, в соответствии с этим ответом . Все остальное должно иметь встроенную поддержку.

Таким образом, вы можете получить выходные данные команды powershell, просто сохранив ее в переменной или выведя в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...