继续从文件中读取,寻找一些关键字
我有一个日志文件,需要继续监视该文件查找某些关键字,我创建了一个PowerShell脚本,并使用 get-content
命令使用 -Wait
flag,但是, get-content
只是读取第一个关键字,如果我删除 -Wait
它可以正常工作并阅读所有关键字,但是它将在完成后退出,我希望文件以继续等待附加行。
请就此告知我。
这是我的代码:
$date = Get-date -Format "yyyyMMdd"
$MyError = @('error 1', 'error 2', 'error 3')
$file=$date.log"
foreach ($i in $MyError) {
Get-Content "$file" -Wait | Select-String -Pattern $i -SimpleMatch | ForEach-Object {
if ($i -like 'error 1') {
Write-EventLog -source Test -LogName Test -EventId 1001 -EntryType Error -Message " "
}
if ($i -like 'error 2') {
Write-EventLog -source Test -LogName Test -EventId 1002 -EntryType Error -Message " "
}
if ($i -like 'error 3') {
Write-EventLog -source Test -LogName Test -EventId 1003 -EntryType Error -Message " "
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
代码的问题是
-Wait
阻止主线程,无限期等到 ctrl+ctrl+c 。因此,您的外部foreach
循环一次,因此$ i
始终是错误1
。解决问题的一个简单解决方案是循环循环foreach-object
,而且还使用aswitch> switch -wildcard
将简化您的代码:
The issue with your code is that
-Wait
blocks the main thread, waits indefinitely until CTRL+C. Because of this, your outerforeach
loops only once, so$i
is alwayserror 1
. An easy fix for your problem is to loop inside theForEach-Object
, but also, using aswitch -Wildcard
would simplify your code: