functions/discovery/Search-TssDiscoverySource.ps1

function Search-TssDiscoverySource {
    <#
    .SYNOPSIS
    Search discovery sources
 
    .DESCRIPTION
    Lists discovery sources.
    Returns active sources unless -IncludeInactive is given.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER DiscoverySourceName
    Only return sources whose name contains this text
 
    .PARAMETER DiscoverySourceType
    Only return sources of this type, for example ActiveDirectory or Unix
 
    .PARAMETER IncludeActive
    Include active sources
 
    .PARAMETER IncludeInactive
    Include inactive sources
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Search-TssDiscoverySource -TssSession $session
 
    List the active discovery sources
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Search-TssDiscoverySource -TssSession $session -IncludeInactive
 
    List active and inactive discovery sources
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/discovery/Search-TssDiscoverySource
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/discovery/Search-TssDiscoverySource.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

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

        [string]
        $DiscoverySourceName,

        [string]
        $DiscoverySourceType,

        [switch]
        $IncludeActive,

        [switch]
        $IncludeInactive
    )
    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', 'sources' -join '/'
            $queryParams = @()
            $queryParams += "take=$($TssSession.Take)"
            switch ($tssParams.Keys) {
                'DiscoverySourceName' {
                    $queryParams += "filter.discoverySourceName=$([uri]::EscapeDataString($DiscoverySourceName))"
                }
                'DiscoverySourceType' {
                    $queryParams += "filter.discoverySourceType=$([uri]::EscapeDataString($DiscoverySourceType))"
                }
                'IncludeActive' {
                    $queryParams += "filter.includeActive=$([boolean]$IncludeActive)"
                }
                'IncludeInactive' {
                    $queryParams += "filter.includeInactive=$([boolean]$IncludeInactive)"
                }
            }
            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 Search-TssDiscoverySource request'
                $err = $_
                . $ErrorHandling $err
            }
            if ($restResponse.records) {
                [Thycotic.PowerShell.Discovery.SourceSummary[]](. $FilterTssResponse $restResponse.records ([Thycotic.PowerShell.Discovery.SourceSummary]))
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}