使用Powershell查找图案

时间:2019-01-21 07:46:38

标签: regex powershell

我有一个日志文件,其中包含来自多个日志文件的多行文本。我正在尝试使用Send-MailMessage在电子邮件的正文中发送日志文件的内容。

我的问题是:我正在尝试从多个日志文件中提取一行文本Exception。我想在if语句中匹配它。我已经尝试过以下脚本,但是没有运气。任何见识将不胜感激。

日志文件内容:

25/Dec/2018 11:50:05.224 ERROR  3805     com.crm.dao.CrmDaoJdbcImpl(L:608) - Exception created
Rerun the transaction.
               at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
               at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1522)
               at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
               at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
               at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)

提取所需的输出后:

25/Dec/2018 11:50:05.224 ERROR  3805     com.crm.dao.CrmDaoJdbcImpl(L:608) - Exception created

这是脚本的摘录供参考。

$SourceDir = "C:\Temp\TEMP2"
#$GCI_Fiter = '*.txt'
$Include=@("*.log","*.txt")

$FileList = Get-ChildItem -LiteralPath $SourceDir -Include "$Include" -File

foreach ($FL_Item in $FileList)   {
$FLI_Content = Get-Content -LiteralPath $FL_Item.FullName -Raw

if ( ???????? )  {
$ExceptionLines = $FLI_Content | Select-String -SimpleMatch 'Exception' | ForEach-Object {$_.ToString().Trim()}

$ExceptionLines
}

else {
Write-Warning "Could not find Exception keyword from '$FL_Item.FullName'.."
}


}

预先感谢

1 个答案:

答案 0 :(得分:1)

查找包含单词“ Exception”的所有行:

Get-Content -Path $file.FullName | Select-String "Exception"

如果要测试是否有包含“ Exception”一词的行,那么就像将上述命令的结果分配给变量并测试值一样简单!

$results = Get-Content -Path $file.FullName | Select-String "Exception"

if ($results) {
    Write-Output "Exception found"
}
else {
    Write-Output "No exception found"
}