PowerShell中Start-Job与Invoke-Command场景下Out-File无法重定向Write-Host问题
问题根因
PowerShell 中 Write-Host 的输出默认直接写入主机信息流(6号流),不会进入标准输出流(1号流),而管道符 | 默认只会传递标准输出流的内容,因此你脚本中的Write-Host输出不会被后续的Out-File捕获,会直接打印到控制台。
解决方法
方案1:替换输出命令(可调整被调用脚本代码时使用)
将s1.ps1中的write-host "sdfsdfad"替换为write-output "sdfsdfad"即可。Write-Output的输出会进入标准输出流,可被管道正常捕获写入文件。
方案2:流重定向(无需修改被调用脚本代码时使用)
如果无法修改s1.ps1的代码,可以在调用脚本时添加流重定向参数,将6号流合并到标准输出流,修改invoke-expression行代码如下:
invoke-expression $env:userprofile\Documents\s1.ps1 6>&1 | out-file -Append $alog
额外说明
你示例代码第一行的$ErrorActionPrefence存在拼写错误,正确写法为$ErrorActionPreference,该错误不影响当前问题的复现,但会导致错误首选项配置不生效。
内容的提问来源于stack exchange,提问作者pico
相关产品推荐
相关产品推荐

