Public/Pam/PamAccounts/New-DSPamAccount.ps1

function New-DSPamAccount {
    <#
    .SYNOPSIS
    Creates a new PAM account
    #>

    [CmdletBinding()]
    #TODO Check credentialType & protectedDataType once PAM enums are added.
    param(
        [ValidateNotNullOrEmpty()]
        [int]$credentialType,
        [ValidateNotNullOrEmpty()]
        [int]$protectedDataType,
        [ValidateNotNullOrEmpty()]
        [guid]$folderID,
        [ValidateNotNullOrEmpty()]
        [string]$label,
        [ValidateNotNullOrEmpty()]
        [string]$username,
        [string]$password,
        [ValidateNotNullOrEmpty()]
        [guid]$adminCredentialID
    )

    BEGIN {
        Write-Verbose '[New-DSPamAccount] Beginning...'
        $URI = "$Script:DSBaseURI/api/pam/credentials"

        if ([string]::IsNullOrWhiteSpace($Global:DSSessionToken)) {
            throw "Session invalid. Please call New-DSSession."
        }
    }
    PROCESS {
        if (![string]::IsNullOrEmpty($password)) {
            $password = Protect-ResourceToHexString $password
        }

        $PamCredentials = @{
            credentialType    = $credentialType
            protectedDataType = $protectedDataType
            folderID          = $folderID
            label             = $label
            username          = $username
            adminCredentialID = $adminCredentialID
            password          = $password
        }

        $params = @{
            Uri    = $URI
            Method = 'POST'
            Body   = $PamCredentials | ConvertTo-Json
        }

        $res = Invoke-DS @params
        return $res
    }
    END {
        If ($res.isSuccess) {
            Write-Verbose '[New-DSPamAccount] Completed Successfully.'
        }
        else {
            Write-Verbose '[New-DSPamAccount] Ended with errors...'
        }
    }
}