functions/lists/Add-TssListOption.ps1

function Add-TssListOption {
    <#
    .SYNOPSIS
    Add option(s) to a list with the specified category
 
    .DESCRIPTION
    Add option(s) to a list with the specified category, the category will be created if missing
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    Add-TssListOption -TssSession $session -Id 'df0b8746-581f-4ac2-a9b2-5a2b7a679f3e' -Category Dev -Option 'server1','server2','server3'
 
    Add the 3 server item values to the category Dev on the specified List ID
 
    .EXAMPLE
    $session = New-TssSession -SecretServer https://alpha -Credential $ssCred
    $list = Search-TssList -TssSession $session -SearchText 'Test List - Servers'
    $data = Import-Csv c:\temp\newlist.csv
    foreach ($category in $data.Category) { Add-TssListOption -TssSession $session -Id $list.CategorizedListId -Category $category -Option $data.Where({$_.Category -eq $Category}).Option }
 
    List "Test List - Servers" ID retrieved, import a CSV (newlist.csv) that contains multiple categories and option values. Each is imported into the provided List.
 
    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/lists/Add-TssListOption
 
    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/lists/Add-TssListOption.ps1
 
    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

    [CmdletBinding(SupportsShouldProcess)]
    [OutputType('Thycotic.PowerShell.List.Item')]
    param (
        # TssSession object created by New-TssSession for authentication
        [Parameter(Mandatory, ValueFromPipeline, Position = 0)]
        [Thycotic.PowerShell.Authentication.Session]
        $TssSession,

        # Categorized List ID
        [Parameter(Mandatory, ValueFromPipelineByPropertyName)]
        [Alias('CategorizedListId')]
        [string]
        $Id,

        # Category name
        [Parameter(Mandatory, ValueFromPipelineByPropertyName, ParameterSetName = 'cat')]
        [Alias('CategoryName')]
        [string]
        $Category,

        # Item value
        [Parameter(Mandatory, ParameterSetName = 'cat')]
        [string[]]
        $Option
    )
    begin {
        $tssParams = $PSBoundParameters
        $invokeParams = . $GetInvokeApiParams $TssSession
    }
    process {
            Get-TssInvocation $PSCmdlet.MyInvocation
            if ($tssParams.ContainsKey('TssSession') -and $TssSession.IsValidSession()) {
                Compare-TssVersion $TssSession '11.0.000005' $PSCmdlet.MyInvocation
                $uri = $TssSession.ApiUrl, 'lists', $Id, 'options', $Category -join '/'
                $invokeParams.Uri = $uri
                $invokeParams.Method = 'POST'

                $categoryBody = @{}
                $categoryOptions = @()
                foreach ($item in $Option) {
                    $categoryOptions += @{
                        category = @{
                            dirty = $true
                            value = $Category
                        }
                        value = @{
                            dirty = $true
                            value = $item
                        }
                    }
                }
                $categoryBody.Add('data',@($categoryOptions))

                $invokeParams.Body = $categoryBody | ConvertTo-Json -Depth 100
                if ($PSCmdlet.ShouldProcess("Category: $Category", "$($invokeParams.Method) $uri with: `n$($invokeParams.Body)")) {
                    Write-Verbose "$($invokeParams.Method) $uri with: `n$($invokeParams.Body)"
                    try {
                        $apiResponse = Invoke-TssApi @invokeParams
                        $restResponse = . $ProcessResponse $apiResponse
                    } catch {
                        Write-Warning 'Issue with request'
                        $err = $_
                        . $ErrorHandling $err
                    }

                    if ($restResponse.records) {
                        foreach ($record in $restResponse.records) {
                            [Thycotic.PowerShell.Lists.Item]@{
                                CategorizedListID = $record.categorizedListId
                                CategorizedListItemId = $record.categorizedListItemId
                                Category = $record.category.value
                                Value = $record.value.value
                            }
                        }
                    }
                }
            } else {
                Write-Warning 'No valid session found'
            }
        }
}