PowerShell标准输出和重定向

时间:2016-03-15 22:09:33

标签: powershell tee console-output

我想构建像

这样的PowerShell管道
cmd | transform_a | stdout_and | transform_b | store_variable
                         ^
                         |
    copy input to next consumer and to console

我尝试使用Tee-Object但没有成功。我不想这样做

dir | select -last 5 | tee lastFiveLines | select -first 1
echo $lastFiveLines

尽管它有效。相反,我希望直接打印内容。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用foreach-loop和Out-DefaultOut-Host来跳过管道的其余部分(主机是默认输出),同时也将对象发送到管道。样品:

Get-ChildItem |
Select-Object Name, FullName |
ForEach-Object { 
    #Send Name-value directly to console (default output)
    $_.Name | Out-Default
    #Send original object down the pipeline
    $_
} |
Select-Object -ExpandProperty FullName | % { Start-sleep -Seconds 1; "Hello $_" }

您可以创建一个过滤器,以便轻松重复使用它。

#Bad filter-name, but fits the question.
filter stdout_and { 
    #Send Name-value directly to console (default output)
    $_.Name | Out-Default
    #Send original object down the pipeline
    $_
}

Get-ChildItem |
Select-Object Name, FullName |
stdout_and |
Select-Object -ExpandProperty FullName | % { Start-sleep -Seconds 1; "Hello $_" }