将流重定向到控制台和日志文件,但不是输出流

时间:2017-10-19 14:41:25

标签: powershell

一个函数提供一些反馈(通过Write-Verbose),处理一个对象,然后将该对象放回输出流。

function f([parameter(Mandatory=$True, ValueFromPipeline=$True [System.Object] $obj)
{
     Write-Verbose "Processing obj"
     do-something $obj
     $obj
}

我需要反馈消息转到控制台和日志文件,但不要进入管道,如

function f([parameter(Mandatory=$True, ValueFromPipeline=$True)][System.Object] $obj)
{
     # Show message on the console and write it to the log file.
     Write-Verbose "Processing obj" 4>&1 | Tee-Object log.txt
     do-something $obj
     $obj
}

以上命令不能用于这样的命令:

 obj1,obj2,obj3,... | f | do-something-cmdlet

因为Tee-Object会将所有详细消息写入输出流,并将流向下一个管道。

有没有办法完成这项工作,或者我需要一个“日志”功能,可以打印每个消息两次 - 控制台和文件?

1 个答案:

答案 0 :(得分:0)

我利用日志功能来做这样的事情。

Function Write-Log
{
    Param(
      [Parameter(Position=0,ValueFromPipeline)]
      [String]$Message
    )

    Process
    {
        Write-Host $Message
        $Message | Out-File -FilePath $global:LogFile -Append
    }
}