首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Powershell中,out-file不会将write-host从start-job和invoke command重定向

在Powershell中,out-file不会将write-host从start-job和invoke command重定向
EN

Stack Overflow用户
提问于 2021-11-04 19:42:39
回答 1查看 48关注 0票数 1

这是我从一个更大的脚本中提炼出来的。我遇到的问题是,输出文件不能将"sdfsdfad“保存到文件,而是打印到控制台"sdfsdfad”。

代码语言:javascript
复制
    $ErrorActionPrefence   = "Stop"

    $s1=@'
        for($i=0; $i -lt 10; $i++) {
            write-host "sdfsdfad"
        }

    '@

    $s1 > $env:userprofile\Documents\s1.ps1

    $sb = {
        $ErrorActionPreference   = "Stop"

        Set-PSDebug -Trace 0
    
        $alog = "$env:userprofile\Documents\a2.txt"
    
        $null > $alog    

        invoke-expression $env:userprofile\Documents\s1.ps1 | out-file -Append $alog
    }

    start-job -ScriptBlock $sb | Receive-job -wait

    Get-Content $env:userprofile\Documents\a2.txt

控制台输出应该在"~\Documents\a2.txt“中:

代码语言:javascript
复制
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
EN

回答 1

Stack Overflow用户

发布于 2021-11-04 20:00:11

  • Don't use Write-Host to output -使用 output.

Write-Output

在您无法控制使用Write-Host的脚本的情况下,您可以使用6>&1将输出重定向到成功输出流,以便通过管道发送它,以便Out-File保存它。

请注意,这只适用于PowerShell v5及更高版本。

有关捕获Write-Host输出的详细信息,请参阅this answer;有关6>&1等重定向语法的信息,请参阅this answer

应用于您的代码(如果您确实必须坚持使用Write-Host):

代码语言:javascript
复制
& $env:userprofile\Documents\s1.ps1 6>&1 | out-file -Append $alog

或者,更简单地说,假设>>实际上是Out-File -Append的别名

代码语言:javascript
复制
& $env:userprofile\Documents\s1.ps1 6>&1 >> $alog

注意:

  • bash等与POSIX兼容的shells不同,重定向的顺序并不重要。
  • 您可以有选择地将多个流合并到成功输出流中,也可以简单地将所有流作为目标(见下文)。

或者,更简单的方法是捕获所有(*)输出流:

代码语言:javascript
复制
& $env:userprofile\Documents\s1.ps1 *>> $alog
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69844964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档