管道中的PowerShell if语句

4
我需要创建一个脚本,能够持续读取文件,如果某一行包含特定文本,则调用函数。
我考虑用单行代码实现这个功能。
Get-Content -Path $logFile -wait | ?{$_-match "$filter"}

但是我不知道如何在满足条件时调用函数。

这可行吗?还是我应该像循环一样读取文件,每个周期检查是否匹配并退出循环?

1个回答

12
将它传递给一个foreach循环,该循环将逐个处理每一行,您可以将if语句放在循环中:
Get-Content -Path $logFile -wait | %{if($_ -match "$filter"){Callfunction}}

4
在 ForEach 循环之前,你可能需要进行筛选。gc $logfile -wait|?{$_ -match "$filter"}|%{callfunction $_}...另外,如果他的回答解决了问题,请将其标记为被采纳的答案,这样他就能获得信用。 - TheMadTechnician
是的,我知道 :) 只是 Stack Overflow 让我等几分钟,然后我才能将其标记为答案,他的方法解决了我的问题。谢谢大家。 - Martin Nikolaev
TheMadTechnician是正确的,你可能想要使用Where-Object cmdlet遍历每一行,然后将你想要的行传递到另一个循环中。个人而言,不会这样做,因为1)没有理由这样做,2)在处理大型日志文件时性能会严重下降。 - Cole9350

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接