functions/discovery/New-TssDiscoveryDependencyTemplate.ps1

function New-TssDiscoveryDependencyTemplate {
    <#
    .SYNOPSIS
    Create a Discovery dependency template
 
    .DESCRIPTION
    Creates a Discovery dependency template that maps a dependency type to a scan template, and returns the created template.
 
    .PARAMETER TssSession
    TssSession object created by New-TssSession for authentication
 
    .PARAMETER Active
    Create the template active. Without it the template is created inactive
 
    .PARAMETER ScanItemTemplateId
    Scan template the dependency template uses
 
    .PARAMETER SecretDependencyChangerId
    Dependency changer the template uses
 
    .PARAMETER SecretDependencyTemplateDescription
    Template description
 
    .PARAMETER SecretDependencyTemplateName
    Template name
 
    .PARAMETER SecretDependencyTypeId
    Dependency type id (see Search-TssDiscoveryDependencyType)
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    New-TssDiscoveryDependencyTemplate -TssSession $session -SecretDependencyTemplateName 'Custom app pools' -SecretDependencyTypeId 7 -ScanItemTemplateId 9 -Active
 
    Create an active dependency template for dependency type 7 on scan template 9
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/discovery/New-TssDiscoveryDependencyTemplate
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/discovery/New-TssDiscoveryDependencyTemplate.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

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

        [switch]
        $Active,

        [Parameter(Mandatory)]
        [int]
        $ScanItemTemplateId,

        [int]
        $SecretDependencyChangerId,

        [string]
        $SecretDependencyTemplateDescription,

        [Parameter(Mandatory)]
        [string]
        $SecretDependencyTemplateName,

        [Parameter(Mandatory)]
        [int]
        $SecretDependencyTypeId
    )
    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', 'dependency-template' -join '/'
            $invokeParams.Uri = $uri
            $invokeParams.Method = 'POST'
            $body = @{ data = @{ } }
            switch ($tssParams.Keys) {
                'Active' {
                    $body.data.Add('active', [boolean]$Active)
                }
                'ScanItemTemplateId' {
                    $body.data.Add('scanItemTemplateId', $ScanItemTemplateId)
                }
                'SecretDependencyChangerId' {
                    $body.data.Add('secretDependencyChangerId', $SecretDependencyChangerId)
                }
                'SecretDependencyTemplateDescription' {
                    $body.data.Add('secretDependencyTemplateDescription', $SecretDependencyTemplateDescription)
                }
                'SecretDependencyTemplateName' {
                    $body.data.Add('secretDependencyTemplateName', $SecretDependencyTemplateName)
                }
                'SecretDependencyTypeId' {
                    $body.data.Add('secretDependencyTypeId', $SecretDependencyTypeId)
                }
            }
            $invokeParams.Body = $body | ConvertTo-Json -Depth 100
            if ($PSCmdlet.ShouldProcess("Discovery dependency template", "$($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 New-TssDiscoveryDependencyTemplate request'
                    $err = $_
                    . $ErrorHandling $err
                }
                if ($restResponse) {
                    [Thycotic.PowerShell.Discovery.DependencyTemplate](. $FilterTssResponse $restResponse ([Thycotic.PowerShell.Discovery.DependencyTemplate]))
                }
            }
        } else {
            Write-Warning 'No valid session found'
        }
    }
}