Public/Read-sLog.ps1

function Read-sLog(){
  <#
  .SYNOPSIS
    Reads data from a logfile.
   
  .DESCRIPTION
    The Read-sLog cmdlet reads data from a specific log file. The log file should be written using the cmdlet Write-sLog.
   
  .PARAMETER Path
    Specifies the path to the logfile.
 
  .PARAMETER LogLevel
    Specifies the loglevel to read.
 
  .PARAMETER OnlyError
    Reads only records with loglevel Error.
 
  .PARAMETER OnlyWarning
    Reads only records with loglevel Waring.
 
  .PARAMETER OnlyInfo
    Reads only records with loglevel Info.
 
  .PARAMETER All
    Reads all records.
   
  .EXAMPLE
    Read-sLog -Path C:\Temp\logfile.log -LogLevel info,error
    Reads records with loglevel info and error.
 
  .EXAMPLE
    Read-sLog -Path C:\Temp\logfile.log -OnlyError
    Reads records with loglevel error.
 
  .EXAMPLE
   Read-sLog -Path C:\Temp\logfile.log
   Reads all records.
   
  .NOTES
    Version: 1.0.0
    Author: Torsten Demmich
 
    --- ChangeLog ---
    1.0.0 Initial Version
 
  .LINK
    https://github.com/t0rsten/PSsimpleLogfile
 
  #>

  [CmdletBinding(DefaultParameterSetName = 'Default')]
  Param(
    [Parameter(ParameterSetName = 'Default', Mandatory = $true, HelpMessage = 'Specify the path')]
    [Parameter(ParameterSetName = 'LogLevel', Mandatory = $true, HelpMessage = 'Specify the path')]
    [Parameter(ParameterSetName = 'OnlyError', Mandatory = $true, HelpMessage = 'Specify the path')]
    [Parameter(ParameterSetName = 'OnlyWarning', Mandatory = $true, HelpMessage = 'Specify the path')]
    [Parameter(ParameterSetName = 'OnlyInfo', Mandatory = $true, HelpMessage = 'Specify the path')]
    [ValidateScript({
      If(Test-Path -Path $_ -PathType Any){
        $true }
      else {
        throw '{0} path not found.' -f $_
      }
    })]
    $Path,

    [Parameter(ParameterSetName = 'LogLevel', Mandatory=$false, HelpMessage='Specify')]
    [array]$LogLevel,

    [Parameter(ParameterSetName = 'OnlyError', Mandatory=$false, HelpMessage='Specify')]
    [Switch]$OnlyError,

    [Parameter(ParameterSetName = 'OnlyWarning', Mandatory=$false, HelpMessage='Specify')]
    [Switch]$OnlyWarning,

    [Parameter(ParameterSetName = 'OnlyInfo', Mandatory=$false, HelpMessage='Specify')]
    [Switch]$OnlyInfo,

    [Parameter(ParameterSetName = 'Default', Mandatory=$false, HelpMessage='Specify')]
    [Switch]$All
  
    )

    begin{
      Write-Verbose -Message ('Read logfile {0}' -f $Path)
      $LogFileHeader = 'DateTime','LogLevel','Message'
      $Data = Import-Csv -Delimiter ';' -Header $LogFileHeader -Path $Path
      Write-Verbose -Message ('Logfile with {0} Messages' -f $Data.Count)
    }

    process{
      if (-not $LogLevel){
        Switch ($PSBoundParameters.GetEnumerator().
        Where({$_.Value -eq $true}).Key){
          'OnlyError'   { $Result = $Data | Where-Object { $_.LogLevel -eq 'Error'} }
          'OnlyWarning' { $Result = $Data | Where-Object { $_.LogLevel -eq 'Warning'}  }
          'OnlyInfo'    { $Result = $Data | Where-Object { $_.LogLevel -eq 'Info'} }
          Default       { $Result = $Data }
        }
      } else {
        $Result = $Data | Where-Object { $_.LogLevel -in $LogLevel }
      }

    }
    
    end{
      return $Result
    }
    
  }