PSLogParser.psm1

# Module created by Microsoft.PowerShell.Crescendo
class PowerShellCustomFunctionAttribute : System.Attribute {
    [bool]$RequiresElevation
    [string]$Source
    PowerShellCustomFunctionAttribute() { $this.RequiresElevation = $false; $this.Source = "Microsoft.PowerShell.Crescendo" }
    PowerShellCustomFunctionAttribute([bool]$rElevation) {
        $this.RequiresElevation = $rElevation
        $this.Source = "Microsoft.PowerShell.Crescendo"
    }
}



function Invoke-PSLogParser {
    [PowerShellCustomFunctionAttribute(RequiresElevation = $False)]
    [CmdletBinding()]

    param(
        [Parameter()]
        [ValidateSet("IISW3C", "NCSA", "IIS", "IISODBC", "BIN", "IISMSID", "HTTPERR", "URLSCAN", "CSV", "TSV", "W3C", "XML", "EVT", "ETW", "NETMON", "REG", "ADS", "TEXTLINE", "TEXTWORD", "FS", "COM")]
        [string]$InputLogFileType,
        [Parameter()]
        [ValidateSet("CSV", "TSV", "XML", "DATAGRID", "CHART", "SYSLOG", "NEUROVIEW", "NAT", "W3C", "IIS", "SQL", "TPL", "NULL")]
        [string]$OutputLogFileType,
        [Parameter(Mandatory)]
        [string]$SQLquery,
        [Parameter()]
        [switch]$WhatIf
    )

    BEGIN {
        $__PARAMETERMAP = @{
            InputLogFileType  = @{
                OriginalName      = '-i:'
                OriginalPosition  = '0'
                Position          = '2147483647'
                ParameterType     = 'string'
                ApplyToExecutable = $False
                NoGap             = $False
            }
            OutputLogFileType = @{
                OriginalName      = '-o:'
                OriginalPosition  = '1'
                Position          = '2147483647'
                ParameterType     = 'string'
                ApplyToExecutable = $False
                NoGap             = $False
            }
            SQLquery          = @{
                OriginalName      = ''
                OriginalPosition  = '2'
                Position          = '2147483647'
                ParameterType     = 'string'
                ApplyToExecutable = $False
                NoGap             = $False
            }
            WhatIf            = @{
                OriginalName      = '-queryInfo'
                OriginalPosition  = '3'
                Position          = '2147483647'
                ParameterType     = 'switch'
                ApplyToExecutable = $False
                NoGap             = $False
            }
        }

        $__outputHandlers = @{ Default = @{ StreamOutput = $true; Handler = { $input } } }
    }

    PROCESS {
        $__boundParameters = $PSBoundParameters
        $__defaultValueParameters = $PSCmdlet.MyInvocation.MyCommand.Parameters.Values.Where({ $_.Attributes.Where({ $_.TypeId.Name -eq "PSDefaultValueAttribute" }) }).Name
        $__defaultValueParameters.Where({ !$__boundParameters["$_"] }).ForEach({ $__boundParameters["$_"] = Get-Variable -value $_ })
        $__commandArgs = @()
        $MyInvocation.MyCommand.Parameters.Values.Where({ $_.SwitchParameter -and $_.Name -notmatch "Debug|Whatif|Confirm|Verbose" -and ! $__boundParameters[$_.Name] }).ForEach({ $__boundParameters[$_.Name] = [switch]::new($false) })
        if ($__boundParameters["Debug"]) { Wait-Debugger }
        foreach ($paramName in $__boundParameters.Keys |
            Where-Object { !$__PARAMETERMAP[$_].ApplyToExecutable } |
            Sort-Object { $__PARAMETERMAP[$_].OriginalPosition }) {
            $value = $__boundParameters[$paramName]
            $param = $__PARAMETERMAP[$paramName]
            if ($param) {
                if ($value -is [switch]) {
                    if ($value.IsPresent) {
                        if ($param.OriginalName) { $__commandArgs += $param.OriginalName }
                    }
                    elseif ($param.DefaultMissingValue) { $__commandArgs += $param.DefaultMissingValue }
                }
                elseif ( $param.NoGap ) {
                    $pFmt = "{0}{1}"
                    if ($value -match "\s") { $pFmt = "{0}""{1}""" }
                    $__commandArgs += $pFmt -f $param.OriginalName, $value
                }
                else {
                    if ($param.OriginalName) { $__commandArgs += $param.OriginalName }
                    $__commandArgs += $value | ForEach-Object { $_ }
                }
            }
        }
        $__commandArgs = $__commandArgs | Where-Object { $_ -ne $null }
        if ($__boundParameters["Debug"]) { Wait-Debugger }
        if ( $__boundParameters["Verbose"]) {
            Write-Verbose -Verbose -Message .\LogParser.exe
            $__commandArgs | Write-Verbose -Verbose
        }
        $__handlerInfo = $__outputHandlers[$PSCmdlet.ParameterSetName]
        if (! $__handlerInfo ) {
            $__handlerInfo = $__outputHandlers["Default"] # Guaranteed to be present
        }
        $__handler = $__handlerInfo.Handler
        if ( $PSCmdlet.ShouldProcess(".\LogParser.exe $__commandArgs")) {
            # check for the application and throw if it cannot be found
            if ( -not (Get-Command -ErrorAction Ignore ".\LogParser.exe")) {
                throw "Cannot find executable '.\LogParser.exe'"
            }
            if ( $__handlerInfo.StreamOutput ) {
                & ".\LogParser.exe" $__commandArgs | & $__handler
            }
            else {
                $result = & ".\LogParser.exe" $__commandArgs
                & $__handler $result
            }
        }
    } # end PROCESS

    <#
 
 
.DESCRIPTION
Reads a log file and outputs to a given format specified
 
.PARAMETER InputLogFileType
Set the type of log file you are about to process
 
 
.PARAMETER OutputLogFileType
Set the output filetype of this log to convert to
 
 
.PARAMETER SQLquery
Mandatory parameter in order to make this module work keep it simple if unsure like "Select * From C:\logfile.log"
 
 
.PARAMETER WhatIf
Shows what would be run if you were to run the query
 
 
 
#>

}