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

时间:2018-06-30 18:32:27

标签: powershell

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

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

谢谢。

编辑

我要导入的功能如下:

. "D:\common.ps1"

并按如下方式调用它:

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

在函数中,调用之一如下

svn update $FirstRev Start-Process ExecutableName Argument

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

1 个答案:

答案 0 :(得分:1)

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

因此,除非您重定向源,否则您不能选择性地将标准输出从外部程序传递到主机(例如,常规控制台窗口或,因为您将无法确定哪些输出对象(行)来自何处。

要在源上重定向-如果您可以控制被调用者的源代码-您可以使用几种选择,最简单的选择是buildscript { dependencies { classpath "com.liferay:com.liferay.gradle.plugins.workspace:1.9.2" } repositories { maven { credentials { username = artifactory_username password = artifactory_password } url "https://example/artifactory/libs-release" } } } ,如以下示例所示:

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 命令的输出发送到主机。

在PSv5 +中,cmd.exe写入新引入的信息流(编号Write-Host),您可以选择使用6禁止显示主机输出调用时。

要颠倒逻辑,请使用6>$null而不是Write-Information(仅适用于PSv5 +),默认情况下它是静默的,允许您使用Write-Host打开输出。

如果您想在PSv4中使用默认的默认行为,请使用$InformationPreference = 'Continue'Write-Verbose,但请注意,这样的输出将是不同的颜色,每行都有前缀({{1 }}和Write-Debug