Functions/Safes/Find-PASSafe.ps1

# .ExternalHelp psPAS-help.xml
function Find-PASSafe {
    [CmdletBinding()]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false
        )]
        [string]$search,

        [parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $false
        )]
        [int]$TimeoutSec

    )

    BEGIN {

        Assert-VersionRequirement -RequiredVersion 10.1 -MaximumVersion 11.7

        #Create base URL for request
        $URI = "$Script:BaseURI/api/Safes"
        $SearchQuery = $null
        $Limit = 25   #default if you call the API with no value

    }#begin

    PROCESS {

        If ( -Not [string]::IsNullOrEmpty($search) ) {

            $SearchQuery = "&$($PSBoundParameters | Get-PASParameter | ConvertTo-QueryString)"

        }

        $InitialResponse = Invoke-PASRestMethod -Uri "$URI`?limit=$Limit$SearchQuery" -Method GET -WebSession $Script:WebSession -TimeoutSec $TimeoutSec

        $Total = $InitialResponse.Total

        If ($Total -gt 0) {

            $Safes = [Collections.Generic.List[Object]]::New(($InitialResponse.Safes))

            For ( $Offset = $Limit ; $Offset -lt $Total ; $Offset += $Limit ) {

                $Null = $Safes.AddRange((Invoke-PASRestMethod -Uri "$URI`?limit=$Limit&OffSet=$Offset$searchQuery" -Method GET -WebSession $Script:WebSession -TimeoutSec $TimeoutSec).Safes)

            }

            $Safes

        }

    }#process

    END { }#end

}