Notify when text files contain a pattern using PowerShell and RegEx

Created by: Gunnar Steinn Magnússon

In this post you will create a test in exMon, using PowerShell and regular expression, to find all lines in text files that contain a specific pattern. In this case, we will look for all lines that contain two or more semicolons.   

  1. Create a new Query in exMon Data Governance by right-clicking the Tests folder
  2. Hover over New
  3. Click on Query

  4. Name your query and click OK
  5. Near the navigation ribbon, select the Data Provider dropdown
  6. Click PowerShell

     
  7. In the query window add the following PowerShell script:
# The files to check for
$path = "C:\temp\Names*.txt"
# The regex pattern to look for. This case, two or more semicommas in a line
$regex = "(.*);(.*);(.*)"

# Create the result DataTable
$exMonResult= New-Object system.Data.DataTable

$exMonResult.columns.add(($cFileName = New-Object system.Data.DataColumn FileName,([string])))
$exMonResult.columns.add(($cLineNum = New-Object system.Data.DataColumn LineNum,([int])))
$exMonResult.columns.add(($cText = New-Object system.Data.DataColumn Text,([string])))


# Loop through the files
$files = Get-ChildItem $path
foreach ($file in $files)
{
# Loop through each line in the file
$lineNum = 0
foreach($line in Get-Content $file) {
$lineNum++

# If we match, add to our results
if($line -match $regex){
$row = $exMonResult.NewRow();

$row.FileName = $file;
$row.LineNum = $lineNum;
$row.Text = $line;

$exMonResult.Rows.Add($row)
}
}
}

Adjusting your Powershell Query

  1. Change the $path variable to match your files 
  2. Change the $regex variable to match your regular expression pattern. 
  3. Configure email settings and schedule as normal. 

Example email from the test:

 

Gunnar is the author of this solution article.