functions/discovery/Set-TssDiscoveryScanner.ps1

function Set-TssDiscoveryScanner {
    <#
    .SYNOPSIS
    Update a discovery scanner
 
    .DESCRIPTION
    Updates a discovery scanner.
    Only the parameters given are changed.
    Built-in scanners usually cannot be edited and return an error.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER Id
    Scanner ID
 
    .PARAMETER BaseScannerId
    Base scanner ID
 
    .PARAMETER CommandSetId
    Command set ID
 
    .PARAMETER InputScanItemTemplateId
    ID of the scan template the scanner takes as input
 
    .PARAMETER IsActive
    Make the scanner active, or inactive with -IsActive:$false
 
    .PARAMETER ItemScannerDescription
    Scanner description
 
    .PARAMETER ItemScannerName
    Scanner name
 
    .PARAMETER OutputScanItemTemplateId
    ID of the scan template the scanner returns
 
    .PARAMETER ScannerId
    Scanner type ID
 
    .PARAMETER ScriptArguments
    Arguments passed to the scanner script
 
    .PARAMETER ScriptId
    ID of the script the scanner runs
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Set-TssDiscoveryScanner -TssSession $session -Id 42 -ItemScannerName 'Find Linux accounts'
 
    Rename scanner 42
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Set-TssDiscoveryScanner -TssSession $session -Id 42 -IsActive:$false
 
    Make scanner 42 inactive
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/discovery/Set-TssDiscoveryScanner
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/discovery/Set-TssDiscoveryScanner.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

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

        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('ItemScannerId')]
        [int]
        $Id,

        [int]
        $BaseScannerId,

        [int]
        $CommandSetId,

        [int]
        $InputScanItemTemplateId,

        [switch]
        $IsActive,

        [string]
        $ItemScannerDescription,

        [string]
        $ItemScannerName,

        [int]
        $OutputScanItemTemplateId,

        [int]
        $ScannerId,

        [string]
        $ScriptArguments,

        [int]
        $ScriptId
    )
    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', 'scanners', $Id -join '/'
            $invokeParams.Uri = $uri
            $invokeParams.Method = 'PATCH'
            $body = @{ data = @{ } }
            switch ($tssParams.Keys) {
                'BaseScannerId' {
                    $body.data.Add('baseScannerId', @{ dirty = $true; value = $BaseScannerId })
                }
                'CommandSetId' {
                    $body.data.Add('commandSetId', @{ dirty = $true; value = $CommandSetId })
                }
                'InputScanItemTemplateId' {
                    $body.data.Add('inputScanItemTemplateId', @{ dirty = $true; value = $InputScanItemTemplateId })
                }
                'IsActive' {
                    $body.data.Add('isActive', @{ dirty = $true; value = [boolean]$IsActive })
                }
                'ItemScannerDescription' {
                    $body.data.Add('itemScannerDescription', @{ dirty = $true; value = $ItemScannerDescription })
                }
                'ItemScannerName' {
                    $body.data.Add('itemScannerName', @{ dirty = $true; value = $ItemScannerName })
                }
                'OutputScanItemTemplateId' {
                    $body.data.Add('outputScanItemTemplateId', @{ dirty = $true; value = $OutputScanItemTemplateId })
                }
                'ScannerId' {
                    $body.data.Add('scannerId', @{ dirty = $true; value = $ScannerId })
                }
                'ScriptArguments' {
                    $body.data.Add('scriptArguments', @{ dirty = $true; value = $ScriptArguments })
                }
                'ScriptId' {
                    $body.data.Add('scriptId', @{ dirty = $true; value = $ScriptId })
                }
            }
            $invokeParams.Body = $body | ConvertTo-Json -Depth 100
            if ($PSCmdlet.ShouldProcess("Discovery scanner: $Id", "$($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-TssDiscoveryScanner request'
                    $err = $_
                    . $ErrorHandling $err
                }
                if ($restResponse) {
                    [Thycotic.PowerShell.Discovery.Scanner](. $FilterTssResponse $restResponse ([Thycotic.PowerShell.Discovery.Scanner]))
                }
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}