我在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
对于上述两个语句,我在调用它们的包含函数时看不到标准输出。
答案 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
。