Functions/Safes/Get-PASSafe.ps1

function Get-PASSafe {
    <#
.SYNOPSIS
Returns safe details from the vault.

.DESCRIPTION
Gets safe by SafeName, by search query string, or, by default will return all safes.

.PARAMETER SafeName
The name of a specific safe to get details of.

.PARAMETER query
Query String for safe search in the vault

.PARAMETER FindAll
Specify to find all safes.
If SafeName or query are not specified, FindAll is the default behaviour.

.PARAMETER TimeoutSec
See Invoke-WebRequest
Specify a timeout value in seconds

.EXAMPLE
Get-PASSafe -SafeName SAFE1

Returns details of "Safe1"

.LINK
https://pspas.pspete.dev/commands/Get-PASSafe
#>

    [CmdletBinding(DefaultParameterSetName = "byAll")]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true,
            ParameterSetName = "byName"
        )]
        [ValidateNotNullOrEmpty()]
        [string]$SafeName,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false,
            ParameterSetName = "byQuery"
        )]
        [string]$query,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false,
            ParameterSetName = "byAll"
        )]
        [switch]$FindAll,

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

    BEGIN { }#begin

    PROCESS {

        #Create base URL for request
        $URI = "$Script:BaseURI/WebServices/PIMServices.svc/Safes"

        #If SafeName specified
        If ($($PSCmdlet.ParameterSetName) -eq "byName") {

            $returnProperty = "GetSafeResult"

            #Build URL from base URL
            $URI = "$URI/$($SafeName | Get-EscapedString)"

        }

        #If search query specified
        ElseIf ($($PSCmdlet.ParameterSetName) -eq "byQuery") {

            $returnProperty = "SearchSafesResult"

            #Get Parameters to include in request
            $boundParameters = $PSBoundParameters | Get-PASParameter

            #Create Query String, escaped for inclusion in request URL
            $queryString = ($boundParameters.keys | ForEach-Object {

                    "$_=$($boundParameters[$_] | Get-EscapedString)"

                }) -join '&'

            #Build URL from base URL
            $URI = "$URI`?$queryString"

        }

        ElseIf ($($PSCmdlet.ParameterSetName) -eq "byAll") {

            $returnProperty = "GetSafesResult"

        }

        #send request to web service
        $result = Invoke-PASRestMethod -Uri $URI -Method GET -WebSession $Script:WebSession -TimeoutSec $TimeoutSec

        If ($result) {

            $result.$returnProperty | Add-ObjectDetail -typename psPAS.CyberArk.Vault.Safe

        }

    }#process

    END { }#end

}