Invoke-Expression - записывать вывод в консоль, но не возвращать его из функции

Я хочу вызвать внутри функции и распечатать вывод команды на консоль, но не возвращать его из функции, так как я хочу вернуть из нее определенное значение.

      function Foo {
    $command = 'mvn clean package "-Dmaven.test.skip"'
    Invoke-Expression -Command $command | Write-Host

    $result = 'computed return value'
    return $result
}

Foo

Это работает, но я хочу избежать использования злой функции, поэтому я попробовал вместо этого. Но мне кажется, вы не можете направить вывод в. Когда я просто заменяю на Write-Information он ведет себя так, как будто Параметр не указан (аналогично при явном указании -MessageData).

Есть ли способ записать вывод Invoke-Expression в консоль, но не возвращайте его из функции без использования Write-Host?

2 ответа

Вы пытаетесь с OutVariable

      function Foo {
    $command = 'mvn clean package "-Dmaven.test.skip"'
    Invoke-Expression -Command $command -OutVariable OutputData | Out-Null

    Write-Information -MessageData "INFO: $OutputData" -INFA "Continue"
    return "something else"
}

Вывод на экран - это значение по умолчанию Powershell, если вы не укажете иное. Итак, Write- * во многих случаях почти спорен. Тем не менее, у людей есть свои причины использовать командлеты Write- *.

Есть несколько способов записи на экран и даже сохранения в переменную и одновременной записи на экран.

  • переменное сжатие
  • Out-String
  • Out-Host
  • Тройник-Объект

Вышеупомянутое и многое другое регулярно освещалось.

Примеры веб-обращений:

https://ridicurious.com/2017/06/30/3-ways-to-store-display-results-infrom-a-powershell-variable-at-the-same-time

https://mikefrobbins.com/2014/03/28/powershell-output-the-result-of-a-command-and-assign-it-to-a-variable-in-one-line

      Get-Process a* -OutVariable process
($process = Get-Process a*)
Get-Process a* | Tee-Object -Variable p

Ваш пост можно даже рассматривать как дубликат аналогичного варианта использования:

Вывод выражения вызова на экране и в переменной

      Invoke-Expression $var -OutVariable | Tee-Object -Variable out 

Invoke-Expression $var | Tee-Object C:\Path\To\File.txt

Запуск исполняемых файлов из Powershell также хорошо документирован. Смотрите это от MS.

• PowerShell: запуск исполняемых файлов

https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

Другие вопросы по тегам