functions/discovery/Get-TssDiscoveryComputerScanLog.ps1

function Get-TssDiscoveryComputerScanLog {
    <#
    .SYNOPSIS
    Get Discovery computer scan logs
 
    .DESCRIPTION
    Returns Discovery computer scan log entries, filtered by computer, scanner, discovery source, scan template, outcome, date range or log text.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER ComputerId
    Only return logs for this discovered computer id
 
    .PARAMETER DiscoveryItemScannerId
    Only return logs for this scanner id
 
    .PARAMETER DiscoverySourceId
    Only return logs for this discovery source id
 
    .PARAMETER Result
    Only return successful scans (Success) or failed scans (Error). Omit for both
 
    .PARAMETER ScanEndDate
    Only return logs with a scan date on or before this date
 
    .PARAMETER ScanItemTemplateId
    Only return logs for this scan template id
 
    .PARAMETER ScanStartDate
    Only return logs with a scan date on or after this date
 
    .PARAMETER SearchText
    Only return logs whose message contains this text
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Get-TssDiscoveryComputerScanLog -TssSession $session -ComputerId 42
 
    Get the scan logs of discovered computer 42
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Get-TssDiscoveryComputerScanLog -TssSession $session -Result Error -ScanStartDate (Get-Date).AddDays(-1)
 
    Get the failed computer scans of the last day
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/discovery/Get-TssDiscoveryComputerScanLog
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/discovery/Get-TssDiscoveryComputerScanLog.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

    [CmdletBinding()]
    [OutputType('Thycotic.PowerShell.Discovery.ComputerScanLog[]')]
    param (
        [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
        [Thycotic.PowerShell.Authentication.Session]
        $TssSession,

        [int]
        $ComputerId,

        [int]
        $DiscoveryItemScannerId,

        [int]
        $DiscoverySourceId,

        [ValidateSet('Success', 'Error')]
        [string]
        $Result,

        [datetime]
        $ScanEndDate,

        [int]
        $ScanItemTemplateId,

        [datetime]
        $ScanStartDate,

        [string]
        $SearchText
    )
    begin {
        $tssParams = $PSBoundParameters
        $invokeParams = . $GetInvokeApiParams $TssSession
    }
    process {
        Get-TssInvocation $PSCmdlet.MyInvocation
        if ($tssParams.ContainsKey('TssSession') -and $TssSession.IsValidSession()) {
            Compare-TssVersion $TssSession '10.9.000000' $PSCmdlet.MyInvocation
            $uri = $TssSession.ApiUrl, 'discovery', 'network', 'item', 'computer', 'scan', 'logs' -join '/'
            $queryParams = @()
            $queryParams += "take=$($TssSession.Take)"
            switch ($tssParams.Keys) {
                'ComputerId' {
                    $queryParams += "filter.computerId=$($ComputerId)"
                }
                'DiscoveryItemScannerId' {
                    $queryParams += "filter.discoveryItemScannerId=$($DiscoveryItemScannerId)"
                }
                'DiscoverySourceId' {
                    $queryParams += "filter.discoverySourceId=$($DiscoverySourceId)"
                }
                'Result' {
                    $queryParams += "filter.logLevel=$(($Result -eq 'Success').ToString().ToLower())"
                }
                'ScanEndDate' {
                    $queryParams += "filter.scanEndDate=$([uri]::EscapeDataString($ScanEndDate.ToString('o')))"
                }
                'ScanItemTemplateId' {
                    $queryParams += "filter.scanItemTemplateId=$($ScanItemTemplateId)"
                }
                'ScanStartDate' {
                    $queryParams += "filter.scanStartDate=$([uri]::EscapeDataString($ScanStartDate.ToString('o')))"
                }
                'SearchText' {
                    $queryParams += "filter.searchText=$([uri]::EscapeDataString($SearchText))"
                }
            }
            if ($queryParams) {
                $uri = $uri, ($queryParams -join '&') -join '?'
            }
            $invokeParams.Uri = $uri
            $invokeParams.Method = 'GET'
            Write-Verbose "Performing the operation $($invokeParams.Method) $uri"
            try {
                $apiResponse = Invoke-TssApi @invokeParams
                $restResponse = . $ProcessResponse $apiResponse
            } catch {
                Write-Warning 'Issue with Get-TssDiscoveryComputerScanLog request'
                $err = $_
                . $ErrorHandling $err
            }
            if ($restResponse.records) {
                [Thycotic.PowerShell.Discovery.ComputerScanLog[]](. $FilterTssResponse $restResponse.records ([Thycotic.PowerShell.Discovery.ComputerScanLog]))
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}