Powershell 调试控制台中的标准输出



我在powershell中有一个很长的脚本,它调用位于单独的.ps1文件中的更长的函数。该函数运行一些svn update命令和一些生成标准输出的编译可执行文件。当我直接从脚本运行这些时,输出被重定向到Powershell ISE中的调试控制台。当我通过函数运行它们时,我可以判断它们正在运行,但我在控制台中没有标准输出。

如何将函数中的标准输出重定向回 Powershell 调试控制台,我可以在其中看到它?

谢谢。

编辑

我正在导入函数,如下所示:

. "D:common.ps1"

并按如下方式调用它:

$MedianValue = Run-Comparison $LastRev $FirstRev $ScriptPath $SolutionPath $DevenvPath $TestPath $refFile $SVNPAth

在函数中,其中一个调用如下所示

svn update $FirstRevStart-Process ExecutableName Argument

对于上述两个语句,当我调用它们的包含函数时,我看不到标准输出。

如果要捕获脚本的/函数的输出,并且该脚本/函数包含 PowerShell 本机输出语句和生成标准输出的外部程序调用的混合,则这两种类型的输出都将发送到 PowerShell 的常规成功输出流。

因此,除非在源位置重定向,否则无法有选择地将标准输出从外部程序传递到主机(例如,常规控制台窗口或 ISE 中的控制台窗格(,因为您将无法分辨哪些输出对象(行(来自何处。

要在源重定向 - 如果您可以控制被调用方的源代码 - 您有几个选项,最简单的是Write-Host,如以下示例所示:

function Run-Comparison {
'PS success output'
cmd /c 'echo external stdout output' | Write-Host
}
# Captures 'PS success output', but passes the cmd.exe output through to the console.
$MedianValue = Run-Comparison

上述操作有选择地将cmd.exe命令的输出发送到主机。

在 PSv5+ 中,Write-Host写入新引入的信息流(编号6(,您可以选择在调用时通过6>$null来抑制到主机的输出。

要反转逻辑,请使用Write-Information而不是Write-Host(仅限 PSv5+(,默认情况下它是静默的,并允许您使用$InformationPreference = 'Continue'打开输出。

如果您希望在 PSv4- 中默认保持静默行为,请使用Write-VerboseWrite-Debug,但请注意,此类输出将是不同的颜色,每行都有一个前缀(分别为VERBOSE:DEBUG:(。