是否等待"休息"来自powershell的Get-Content的等待循环?

时间:2018-06-09 13:16:21

标签: powershell

是否等待"休息"来自powershell的Get-Content的等待循环?

Get-Content "$PSScriptRoot\out.txt" -Wait

out.txt有一定数量的行被写入,我想在到达结束时停止循环。 到目前为止,我需要用" ctrl + c"发送信号。完成。 在伪代码中,类似于

Get-Content "$PSScriptRoot\out.txt" -WaitUntil 9
Get-Content "$PSScriptRoot\out.txt" -WaitUntilMatch "^LastOutput"

所以当输出9行时,我们会打破循环。或者当达到某个正则表达式匹配时,我们可以打破循环吗?

2 个答案:

答案 0 :(得分:2)

您可以将值从Get-Content传递给ForEach-Object,并在满足条件时中断。

例如,如果要在达到某个正则表达式匹配时中断,可以使用以下内容:

Get-Content -Path "$PSScriptRoot\out.txt" -Wait | ForEach-Object {$_ ; if($_ -Match "some regex"){break} }

如果您想要在n行之后中断,那么当Bruce回答时,您可以使用Select-Object -Frist n

请注意,如果文件已包含满足条件的内容,并且您只想要添加到文件中的新数据,则还应使用-tail选项。

例如,如果文件已包含9行,并且您只想要将<9>行添加到文件之后,则运行该命令,然后使用:

Get-Content -Path "$PSScriptRoot\out.txt" -Wait -tail 1 | select -skip 1 -first 9

使用-tail 1,该命令将仅输出文件的最后一行以及之后将添加到文件中的新数据。 -skip 1用于过滤掉最后一行,仅输出新数据。

答案 1 :(得分:2)

您可以使用Select-Object -First n在n项之后停止管道:

Get-Content -Path "$PSScriptRoot\out.txt" -Wait  | select -first 9

(虽然我喜欢将-WaitUntil-WaitMatch添加到Get-Content的想法。可能值得在PowerShell Github repo上打开一个问题