Powershell 调用表达式-将输出写入控制台,但不从函数返回
我想在函数中调用Powershell 调用表达式-将输出写入控制台,但不从函数返回,powershell,io,stdout,powershell-5.1,Powershell,Io,Stdout,Powershell 5.1,我想在函数中调用Invoke Expression,并将命令的输出打印到控制台,但不从函数中返回,因为我想从函数中返回特定值 function Foo { $command = 'mvn clean package "-Dmaven.test.skip"' Invoke-Expression -Command $command | Write-Host $result = 'computed return value' return $res
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}"
这是可行的,但是我想避免使用邪恶的
写主机
函数,所以我尝试了写信息
。
但我认为您似乎无法将调用表达式的输出输送到写入信息。当我简单地用写入信息
替换写入主机
时,其行为类似于未提供-MessageData
参数(在明确说明-MessageData
时类似)
是否有方法将调用表达式的输出写入控制台,但避免在不使用写入主机的情况下从函数返回它?您尝试使用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-*cmdlet有其原因
有几种方法可以写入屏幕,甚至可以保存到变量并同时写入屏幕
- 可变压缩
- 外线
- 外宾
- T形物体
上述及以上内容已定期涵盖
网络点击示例:
您的帖子甚至可以被视为类似用例的副本:
从Powershell运行可执行文件也是一个有很好文档记录的用例。看到这个了吗
•PowerShell:运行可执行文件
“但我想避免使用邪恶的写主机功能”-您想要的确切行为(绕过流,直接写入主机)正是写主机有时被描述为邪恶的原因-换句话说,您希望在这里邪恶:)我认为使用写主机有更多的缺点。据我所知,我不能将它的输出重定向到一个文件,例如,当我想在调用它时将整个脚本的所有输出重定向到一个文件,否?执行此Powershell会告诉我,$OutputData
为NULL
对不起,更新了我的帖子,请重试。现在$OutputData
包含输出,但整个输出仍然从函数返回。请在发布代码之前测试代码。此外,换行符似乎不再存在。我再次编辑了我的帖子,并测试了代码,很抱歉,我不知道“缺少换行符”是什么意思。我没有安装mvn
。这应该可以工作,$outputData
被定向到信息流
,而其他东西
被定向到std outTheTee对象
将输出写入管道,这导致函数将其包含在返回值中,这是我想要避免的。
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