如何让PowerShell脚本中调用的外部命令输出显示到主控制台?
解决PowerShell子命令输出不显示到主stdout的问题
问题场景
我用PowerShell脚本自动化应用日常维护工作,脚本代码类似如下:
statement statement $variable $(command $variable) # 此处调用传入变量作为参数的外部.bat文件 statement
执行时子命令能正常运行,但它的输出不会同步到脚本的主stdout中,只会出现一段执行停顿,输出表现如下:
normal output normal output # 子命令执行阶段无输出,仅停顿 normal output
我希望将该子命令的输出捕获并显示到主stdout里,之前了解过Tee-Object,但它主要用于输出到stdout的同时写入文件,不确定是否适配我的需求。
解决方案
直接调用外部命令,移除子表达式包裹
PowerShell的$(...)子表达式会默认捕获输出并作为返回值,而非直接输出到控制台。如果不需要先处理输出,直接去掉子表达式,直接执行命令即可让外部bat的输出直接流向主控制台:command $variable显式输出子表达式的捕获结果
如果必须使用子表达式(比如需要先对输出做预处理),可以将捕获到的结果直接输出到stdout:# 先捕获再输出 $subOutput = $(command $variable) $subOutput # 或一次性输出 $(command $variable) | Write-Output同步外部命令的错误输出(可选)
如果bat文件有错误信息未显示,可将stderr重定向到stdout,确保所有输出都能在主控制台看到:command $variable 2>&1关于Tee-Object的使用
若你需要同时将输出显示到控制台并写入日志文件,Tee-Object完全适用,示例如下:command $variable | Tee-Object -FilePath "maintenance_log.txt"但如果仅需将输出显示到主stdout,前面两种方法更直接高效。
内容的提问来源于stack exchange,提问作者arendon
相关产品推荐
相关产品推荐

