Public/Vaults/Get-DSVaults.ps1

function Get-DSVaults {
    <#
    .SYNOPSIS
    
    .DESCRIPTION
    
    .EXAMPLE
    
    .NOTES
    
    .LINK
    #>

    [CmdletBinding()]
    param(            
        [ValidateSet('Name', 'Description')]
        [string]$SortField = '',
        [System.Management.Automation.SwitchParameter]$Descending,
        [int]$PageNumber = 1,
        [int]$PageSize = 100,
        [Switch]$Legacy 
    )
        
    BEGIN {
        Write-Verbose '[Get-DSVaults] Beginning...'
        if ([string]::IsNullOrWhiteSpace($Global:DSSessionToken)) {
            throw 'Session does not seem authenticated, call New-DSSession.'
        }
    }
    
    PROCESS {
        [System.Collections.ArrayList]$Vaults = @()
        [ServerResponse]$response = $null

        $LegacyRequested = $Legacy.IsPresent
        $PSBoundParameters.Remove('Legacy') | out-null

        if (!$PSBoundParameters.PageNumber) { $PSBoundParameters.Add('PageNumber', $PageNumber) }
        if (!$PSBoundParameters.PageSize) { $PSBoundParameters.Add('PageSize', $PageSize) }

        [System.Version]$ModernVersion = '2020.3.8.0'
        [System.Version]$v = $Global:DSInstanceVersion
            
        if (($LegacyRequested) -or ($v.CompareTo($ModernVersion) -lt 0)) {
            do {
                $response = Get-DSVaultsLegacy @PSBoundParameters
                $response.Body.data | ForEach-Object {
                    $Vaults += $_
                }
                $PageNumber++
            } while ($PageNumber -le $response.Body.totalPage)    
        }
        else {
            do {
                if (!($response = Get-DSVaultsModern @PSBoundParameters).isSuccess) { return $response }
                $response.Body.data | ForEach-Object {
                    $Vaults += $_
                }
                $PageNumber++
                $PSBoundParameters.PageNumber++
            } while ($PageNumber -le $response.Body.totalPage)
        }

        $response.Body.data = $Vaults
        $response.Body.PSObject.Properties.Remove('currentPage')
        $response.Body.PSObject.Properties.Remove('pageSize')
        $response.Body.PSObject.Properties.Remove('totalCount')
        $response.Body.PSObject.Properties.Remove('totalPage')
        return $response
    }
    
    END {
        If ($response.isSuccess) {
            Write-Verbose '[Get-DSVaults] Completed Successfully.'
        }
        else {
            Write-Verbose '[Get-DSVaults] Ended with errors...'
        }
    }
}