2014-04-15 24 views
0

我想创建PowerShell脚本,将通过一些Sql Server脚本的日志文件,并调查存在的单词“错误”。我这样做:PowerShell正则表达式错误,除了从DBCC警告

Get-Content $log | Select-String "error" -quiet #returns true/false 

或 Get-Content $ log |选择字符串“错误” #returns线与“错误”

问题是,我的日志文件中还包含来自DBCC类似的警告:

26: DBCC execution completed. If DBCC printed error messages, contact your system administrator. 
24: DBCC execution completed. If DBCC printed error messages, contact your system administrator. 

如何列出只是“错误”行,但不“如果DBCC打印错误消息”? 我尝试了诸如:

Get-Content "d:\InsightMasterESF\logs\currentlog.txt" | Select-String -pattern "(error)(?!If DBCC printed error messages)" 

但我不知道正则表达式的模式很好。

+1

正则表达式的第一条规则是“知道你的数据”。如果您需要正则表达式的帮助,我们需要确切知道我们需要匹配的数据是什么样的。 – mjolinor

回答

1

尝试使用Where-Object过滤出与您要排除的文本相匹配的行。

Get-Content -Path $Log | Where-Object -FilterScript { $PSItem -match 'error' -and $PSItem -notmatch 'If DBCC printed'; }; 
+0

直到你发布它,我才会给出相同的答案。可能希望将-notmatch'DBCC'更改为更具体一些,并将其设置为-notmatch'如果DBCC打印',以便它不会超出期望的排除范围。 – TheMadTechnician

+0

@TheMadTechnician:完成:)谢谢 –

1

让我知道,如果这有助于:

Select-String -Path "d:\InsightMasterESF\logs\currentlog.txt" -Pattern error | select-string -Pattern 'If DBCC printed error messages' -NotMatch -Quiet 

-notmatch参数需要不匹配DBCC输出了错误消息的照顾。

+0

它的工作。谢谢。 –