0

我想Invoke-Expression在函数内部调用并将命令的输出打印到控制台,但不要从函数中返回它,因为我想从中返回一个特定的值。

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

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


$fooResult = Foo
Write-Output "fooResult is: ${fooResult}"

这行得通,但我想避免使用 evilWrite-Host功能,所以我尝试Write-Information了。但我似乎无法通过管道输出Invoke-Expressionto Write-Information。当我简单地用它替换Write-Host时,Write-Information它的行为就像-MessageData没有提供参数(在明确声明时类似-MessageData)。

有没有办法将输出写入Invoke-Expression控制台,但避免在不使用的情况下从函数中返回它Write-Host

4

2 回答 2

1

你试试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"
}
于 2021-04-15T15:09:14.793 回答
0

输出到屏幕是 Powershell 默认的,除非你告诉它不这样做。因此,在许多情况下,Write-* 几乎没有实际意义。然而,人们有他们使用 Write-* cmdlet 的理由。

有几种方法可以写入屏幕,甚至可以保存到变量并同时写入屏幕。

  • 可变挤压
  • 外串
  • 主机外
  • 三通对象

上述及更多内容已定期进行报道。

网络点击示例:

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

于 2021-04-17T11:11:16.353 回答