public/Get-Journal.ps1

function Get-Journal {
    <#
    .SYNOPSIS
        Invoke the journalctl command with various options.
    .DESCRIPTION
        Invoke the journalctl command with various options.
    .PARAMETER omg
        I'm not going to spend an evening documenting all the parameters. If you're using this function
        you probably know about the journalctl command, and hopefully, you used the 'man' command on it
        to read the options it provides. I'm too lazy.

    .EXAMPLE
        Get-Journal -Lines 10 -Follow
    .LINK
        https://github.com/Skatterbrainz/linuxtools/blob/master/docs/Get-Journal.md
    #>


    param (
        [switch]$Boot,
        [string]$Identifier,
        [string]$UnitName,
        [string]$UserUnit,
        [string]$User,
        [string]$SystemdUnit,
        [string]$ID,
        [string]$GrepPattern,
        [string]$CaseSensitive,
        [switch]$Reverse,
        [int]$Lines,
        [string]$Since,
        [string]$Until,
        [string]$Cursor,
        [string]$After,
        [string]$Follow,
        [switch]$Merge,
        [switch]$ThisBoot,
        [switch]$OutputFields,
        [switch]$OutputVerbose,
        [switch]$OutputCatalog,
        [switch]$UTC,
        [switch]$NoHostname,
        [switch]$NoFullyQualifiedDomainName,
        [switch]$NoPageSize,
        [switch]$NoTail,
        [switch]$Quiet
    )

    $command = "journalctl"

    if ($Boot) { $command += " --boot" }
    if ($Identifier) { $command += " --identifier=$Identifier" }
    if ($UnitName) { $command += " --unit=$UnitName" }
    if ($UserUnit) { $command += " --user-unit=$UserUnit" }
    if ($User) { $command += " --user=$User" }
    if ($SystemdUnit) { $command += " --system=$SystemdUnit" }
    if ($ID) { $command += " _PID=$ID" }
    if ($GrepPattern) { $command += " | grep $GrepPattern" }
    if ($CaseSensitive) { $command += " --case-sensitive=$CaseSensitive" }
    if ($Reverse) { $command += " --reverse" }
    if ($Lines) { $command += " --lines=$Lines" }
    if ($Since) { $command += " --since='$Since'" }
    if ($Until) { $command += " --until='$Until'" }
    if ($Cursor) { $command += " --cursor='$Cursor'" }
    if ($After) { $command += " --after='$After'" }
    if ($Follow) { $command += " --follow=$Follow" }
    if ($Merge) { $command += " --merge" }
    if ($ThisBoot) { $command += " --this-boot" }
    if ($OutputFields) { $command += " --output-fields" }
    if ($OutputVerbose) { $command += " --output-verbose" }
    if ($OutputCatalog) { $command += " --output-catalog" }
    if ($UTC) { $command += " --utc" }
    if ($NoHostname) { $command += " --no-hostname" }
    if ($NoFullyQualifiedDomainName) { $command += " --no-full" }
    if ($NoPageSize) { $command += " --no-pager" }
    if ($NoTail) { $command += " --no-tail" }
    if ($Quiet) { $command += " --quiet" }

    Write-Host "Executing command: $command"
    Invoke-Expression -Command "$command"
}