functions/secret-templates/New-SecretTemplateField.ps1

function New-SecretTemplateField {
    <#
    .SYNOPSIS
    Create a new field object for the TssSecretTemplate object

    .DESCRIPTION
    Create a new field object for the TssSecretTemplate object

    .EXAMPLE
    $session = New-TssSession 'https://alpha/SecretServer' $ssCred
    (Get-TssSecretTemplate -TssSession $session -Id 6042).Fields
    $newField = New-TssSecretTemplateField -FieldName 'Additional Field' -Searchable
    Add-TssSecretTemplateField -TssSession $session -Id 6042 -Field $newField
    (Get-TssSecretTemplate -TssSession $session -Id 6042).Fields

    Output the current fields for Secret Template 6042, create a new field named "Additional Field" that is searchable and add to the Secret Template 6042

    .EXAMPLE
    $session = New-TssSession 'https://alpha/SecretServer' $ssCred
    $copyTemplate = Get-TssSecretTemplate -TssSession $session -Id 6042
    $copyTemplate.Name = 'Test Template - copy of 6042'
    New-TssSecretTemplate -TssSession $session -Template $copyTemplate

    Gets the Secret Template 6042, changing the name of the Template and then creating it.

    .EXAMPLE
    $session = New-TssSession 'https://alpha/SecretServer' $ssCred
    $fields = @()
    $fields += New-TssSecretTemplateField -FieldName 'Field 1 Username' -Searchable
    $fields += New-TssSecretTemplateField -FieldName 'Field 2 Password' -Type Password
    $fields += New-TssSecretTemplateField -FieldName 'Field 3 URL' -Type Url -Searchable
    New-TssSecretTemplate -TssSession $session -TemplateName 'Test Template 42' -TemplateField $fields

    Creates a new template named "Test Template 42" with 3 fields

    .LINK
    https://thycotic-ps.github.io/thycotic.secretserver/commands/Set-TssSecretTemplateStubField

    .LINK
    https://github.com/thycotic-ps/thycotic.secretserver/blob/main/src/functions/secret-templates/Set-SecretTemplateStubField.ps1

    .NOTES
    Requires TssSession object returned by New-TssSession
    #>

    [cmdletbinding()]
    [OutputType('TssSecretTemplateField')]
    param(
        # Field Name - value used for DisplayName, Name, and Slug Name
        [Parameter(Mandatory, Position = 0)]
        [Alias('Field')]
        [string]
        $FieldName,

        # Field Type: Notes, Text, File, Url, or Password
        [ValidateSet('Notes', 'Text', 'File', 'Url', 'Password')]
        [string]
        $Type = 'Text',

        # Edit permission: Owner, Edit, NotEditable
        [string]
        $EditRequire = 'Edit',

        # Field description, defaults to null
        [string]
        $Description,

        # Field is required
        [switch]
        $IsRequired,

        # Viewing requires edit (HideOnView)
        [switch]
        $ViewRequiresEdit,

        # History length for the field, defaults to max (All)
        [int]
        $HistoryLength = [int]::MaxValue,

        # Field values are searchable (IsIndexable)
        [switch]
        $Searchable,

        # Field is exposed for display (not encrypted)
        [switch]
        $ExposeForDisplay,

        # Field order
        [int]
        $SortOrder = 0
    )
    process {
        Write-Verbose "Provided command parameters: $(. $GetInvocation $PSCmdlet.MyInvocation)"

        switch ($EditRequire) {
            'Owner' { $editablePermission = 3 }
            'Edit' { $editablePermission = 2 }
            'NotEditable' { $editablePermission = -1 }
        }
        switch ($Type) {
            'Text' {
                $isUrl = $isPassword = $isNotes = $isFile = $false
            }
            'Notes' {
                $isUrl = $isPassword = $isFile = $false
                $isNotes = $true
            }
            'File' {
                $isUrl = $isPassword = $isNotes = $false
                $isFile = $true
            }
            'Url' {
                $isPassword = $isNotes = $isFile = $false
                $isUrl = $true
            }
            'Password' {
                $isUrl = $isNotes = $isFile = $false
                $isPassword = $true
            }
        }
        if (-not $PSBoundParameters.ContainsKey('ExposeForDisplay')) {
            [boolean]$ExposeForDisplay = $true
        }

        [TssSecretTemplateField]@{
            Description        = $Description
            DisplayName        = $FieldName
            EditablePermission = $editablePermission
            EditRequires       = $EditRequire
            FieldSlugName      = ($FieldName.Split(' ') -join '-').ToLower()
            HideOnView         = [boolean]$ViewRequiresEdit
            HistoryLength      = $HistoryLength
            IsExpirationField  = $false
            IsFile             = [boolean]$isFile
            IsIndexable        = [boolean]$Searchable
            IsNotes            = [boolean]$isNotes
            IsPassword         = [boolean]$isPassword
            IsRequired         = [boolean]$IsRequired
            IsUrl              = [boolean]$isUrl
            MustEncrypt        = [boolean]$ExposeForDisplay
            Name               = $FieldName
            SortOrder          = $SortOrder
        }
    }
}