Public/Pam/PamFolders/New-DSPamFolder.ps1

function New-DSPamFolder {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param (
        [string]$Name = $(throw 'You must provide a name for the new folder.'),
        [parameter(ParameterSetName = 'Default')]
        [guid]$ParentFolderId,
        [parameter(ParameterSetName = 'NewVault')]
        [switch]$AsNewVault
    )
    
    begin {
        Write-Verbose '[New-DSPamFolder] Beginning...'

        if ([string]::IsNullOrWhiteSpace($Global:DSSessionToken)) {
            throw 'Session does not seem authenticated, call New-DSSession.'
        }
    }
    
    process {
        # 1. Check if created inside folder and no parent were provided
        if (($PSCmdlet.ParameterSetName -eq 'Default') -and ($null -eq $ParentFolderId )) {
            throw 'You must provide the ID of the parent folder. If you want to create at root, please use "-AtRoot" flag parameter.'
        }

        # 2. Check if parent folder exists
        if ($PSCmdlet.ParameterSetName -eq 'Default') {
            $ParentFolder = ($res = (Get-DSPamFolder -FolderID $ParentFolderId)).isSuccess ? $res.Body : $(throw 'No folder were found matching the provided parent folder ID. Make sure you provide a valid parent folder ID and try again.')
        }

        # 3. Create new folder and save
        $NewFolder = @{
            folderId             = ''
            name                 = $Name
            encryptedOtpSettings = ''
        }

        if ($PSCmdlet.ParameterSetName -eq 'NewVault' ) {
            $RootFolder = (Get-DSPamFolder -Root).Body
            $NewFolder.folderId = $RootFolder.id
        }
        else {
            $NewFolder.folderId = $ParentFolderId
        }

        $RequestParams = @{
            URI    = "$Script:DSBaseURI/api/pam/folders"
            Method = 'POST'
            Body   = (ConvertTo-Json $NewFolder)
        }

        $res = Invoke-DS @RequestParams
        return $res
    }
    
    end {
        $res.isSuccess ? (Write-Verbose '[New-DSPamFolder] Completed Successfully.') : (Write-Verbose '[New-DSPamFolder] Completed Successfully.')
    }
}