你如何做
之类的事情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时使用。所有这些都可以通过单个管道链命令很好地实现吗?
答案 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
将被过滤。该逻辑也可以以其他方式应用。