我试图将添加到日志文件中的新行发送到松散状态,如果他们中有一个单词 - 如果我有错误,请查看松弛。
我希望工作的是:
$message = Get-Content '\\path\to\file.log' -Wait -Tail 0 | Select-String -Pattern 'ERROR'
foreach($line in $message) { Send-SlackMsg -Text "$($line)" -Channel $channel }
可悲的是,事实并非如此。我已经用Write-Host取代了Send-SlackMsg,看看是不是问题,但事实并非如此。
Get-Content '\\path\to\file.log' -Wait -Tail 0 | Select-String -Pattern 'ERROR'
在我的控制台中像魅力一样工作。
如果出现新行并且它与模式匹配,我如何让PowerShell执行操作?
答案 0 :(得分:2)
根据Mathias的评论,您可以使用ForEach-Object
:
Get-Content '\\path\to\file.log' -Wait -Tail 0 | Select-String -Pattern 'ERROR' | ForEach-Object { Send-SlackMsg -Text $_ -Channel $channel }
您的代码存在的问题是,由于-Wait
切换,代码永远不会超过$message =
行。但是ForEach-Object
通过管道处理对象,因此只要将新行写入匹配“ERROR”的文件,它就会沿着管道向下传递到ForEach-Object
。