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
- Тройник-Объект
Вышеупомянутое и многое другое регулярно освещалось.
Примеры веб-обращений:
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