functions/discovery/Set-TssDiscoverySourceFilter.ps1

function Set-TssDiscoverySourceFilter {
    <#
    .SYNOPSIS
    Update an OU filter of a discovery source
 
    .DESCRIPTION
    Updates the site, credential secret or scan target of one OU or container in the scope of an Active Directory discovery source.
    Only the parameters given are changed.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER DiscoverySourceId
    Discovery source ID
 
    .PARAMETER MemberId
    Filter ID, the DiscoveryFilterId of an item of Get-TssDiscoverySourceFilter
 
    .PARAMETER ScanTargetType
    What to scan in the OU: Users, Computers or UsersAndComputers
 
    .PARAMETER SecretId
    ID of the secret used to scan the OU
 
    .PARAMETER SiteId
    ID of the site that scans the OU
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Set-TssDiscoverySourceFilter -TssSession $session -DiscoverySourceId 3 -MemberId 7 -ScanTargetType Computers
 
    Scan only computers in filter 7 of discovery source 3
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/discovery/Set-TssDiscoverySourceFilter
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/discovery/Set-TssDiscoverySourceFilter.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

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

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [int]
        $DiscoverySourceId,

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('DiscoveryFilterId')]
        [int]
        $MemberId,

        [ValidateSet('Users', 'Computers', 'UsersAndComputers')]
        [string]
        $ScanTargetType,

        [int]
        $SecretId,

        [int]
        $SiteId
    )
    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', 'source', $DiscoverySourceId, 'filter', $MemberId -join '/'
            $invokeParams.Uri = $uri
            $invokeParams.Method = 'PATCH'
            $body = @{ data = @{ } }
            switch ($tssParams.Keys) {
                'ScanTargetType' {
                    $body.data.Add('scanTargetType', @{ dirty = $true; value = $ScanTargetType })
                }
                'SecretId' {
                    $body.data.Add('secretId', @{ dirty = $true; value = $SecretId })
                }
                'SiteId' {
                    $body.data.Add('siteId', @{ dirty = $true; value = $SiteId })
                }
            }
            $invokeParams.Body = $body | ConvertTo-Json -Depth 100
            if ($PSCmdlet.ShouldProcess("Discovery source filter: $DiscoverySourceId", "$($invokeParams.Method) $uri with:`n$($invokeParams.Body)`n")) {
                Write-Verbose "Performing the operation $($invokeParams.Method) $uri with:`n$($invokeParams.Body)`n"
                try {
                    $apiResponse = Invoke-TssApi @invokeParams
                    $restResponse = . $ProcessResponse $apiResponse
                } catch {
                    Write-Warning 'Issue with Set-TssDiscoverySourceFilter request'
                    $err = $_
                    . $ErrorHandling $err
                }
                if ($restResponse) {
                    [Thycotic.PowerShell.Discovery.SourceFilterItem](. $FilterTssResponse $restResponse ([Thycotic.PowerShell.Discovery.SourceFilterItem]))
                }
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}