保留一些管道的值以获得最终输出

时间:2015-01-12 13:10:45

标签: powershell pipe

你如何做

之类的事情
PS> A | B | C | Format-Table PropertyFromA, PropertyFromB, PropertyFromC

所以例如

gci -r -i *.txt | Get-Content | where {$_.Contains("SomeText")} | FormatTable -Property {$_.Directory, $.Name}

在这种情况下,gci输出将具有Directory,Name的属性,但是当我通过Get-Content管道时,这些属性将丢失。如何存储它并在以后通过管道传输到Format-Table时使用。所有这些都可以通过单个管道链命令很好地实现吗?

2 个答案:

答案 0 :(得分:4)

对命令进行一些小修改即可:

gci -r -i *.txt | ? { (gc $_.FullName) -Match "SomeText" } | FormatTable Directory,Name

答案 1 :(得分:1)

Arco444对这种情况有正确的答案。如果你没有向我们展示你提出这个问题的真正原因,或者如果其他人在这里问题,我将展示两个解决这个问题的例子。

Get-ChildItem -Recurse -filter *.txt | ForEach-Object{
   $_ | Add-Member -MemberType NoteProperty -Name FileData -Value (Get-Content $_.FullName) -PassThru
} | Where-Object{($_.Filedata).Contains("SomeText")} | 
Format-Table name,directory


Get-ChildItem -Recurse -filter *.txt | 
    Select Name,Directory,@{Label="FileData";Expression={Get-Content $_.FullName}} | 
    Where-Object{($_.Filedata).Contains("SomeText")} | 
    Format-Table name,directory

这些“oneliners”都是为Get-ChildItem创建的对象添加属性的示例。然后,新属性FileData将被过滤。该逻辑也可以以其他方式应用。