Назначьте выходное сообщение из консоли переменной во время выполнения задания - PullRequest
0 голосов
/ 05 мая 2020
• 1000 успешно сопоставлено с «

Или:« Обнаружена системная ошибка 53 ... »в случае сообщения об ошибке.

Однако $ PSOut всегда возвращает пустое значение.

Что я уже пробовал: Включая следующее в ветку «Остальное». Таким образом, я получаю вывод, если сценарий выполняется успешно, но я еще не нашел способа сделать это, когда сценарий не работает.

$PSOut = (Get-job | Receive-job)

1 Ответ

0 голосов
/ 07 мая 2020

Я решил эту проблему, включив «2> & 1» вместе с командой Receive-Job.

"$job = Start-Job {net use * " & in_NetworkPath & "/persistent:no};"
"$job | Wait-Job -Timeout 60;"
"If ($job.State -eq 'Running')"
   "{$job.StopJob();"+ _
   "$PSOut = Receive-Job $job 2>&1 | Out-String;"
   "throw "Error encountered: Operation timed out" }"
"else"
   "{if ($job.Childjobs[0].Error)"
      "{$PSOut = Receive-Job $job 2>&1 | Out-String; Throw $PSOut }"
   "else"
      "{$PSOut = Receive-Job $job | Out-String}}"

Это работает, потому что Powershell, похоже, разрешает присваивание переменной из Receive-Job, только если текстовое значение находится в информационном потоке. Операция 2> & 1 перемещает текстовый вывод из потока ошибок в поток информации. Однако вы должны принять во внимание, что это помешает Powershell выдавать текст как сообщение об ошибке.

Вы можете узнать больше об операции 2> & 1 [здесь] [1]: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_redirection?view=powershell-7

См. Также: Powershell: получить вывод из Receive -Работа

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