Functions/Public/reservation-service/Get-vRAStorageReservationPolicy.ps1

function Get-vRAStorageReservationPolicy {
<#
    .SYNOPSIS
    Retrieve vRA Storage Reservation Policies
    
    .DESCRIPTION
    Retrieve vRA Storage Reservation Policies
    
    .PARAMETER Id
    Specify the ID of a Storage Reservation Policy

    .PARAMETER Name
    Specify the Name of a Storage Reservation Policy

    .PARAMETER Limit
    The number of entries returned per page from the API. This has a default value of 100.

    .INPUTS
    System.String

    .OUTPUTS
    System.Management.Automation.PSObject.

    .EXAMPLE
    Get-vRAStorageReservationPolicy
    
    .EXAMPLE
    Get-vRAStorageReservationPolicy -Id "068afd10-560f-4360-aa52-786a28573fdc"

    .EXAMPLE
    Get-vRAStorageReservationPolicy -Name "StorageReservationPolicy01","StorageReservationPolicy02"
#>

[CmdletBinding(DefaultParameterSetName="Standard")][OutputType('System.Management.Automation.PSObject')]

    Param (

    [parameter(Mandatory=$true,ValueFromPipeline=$false,ParameterSetName="ById")]
    [ValidateNotNullOrEmpty()]
    [String[]]$Id,         

    [parameter(Mandatory=$true,ValueFromPipeline=$false,ParameterSetName="ByName")]
    [ValidateNotNullOrEmpty()]
    [String[]]$Name, 
    
    [parameter(Mandatory=$false,ValueFromPipeline=$false)]
    [ValidateNotNullOrEmpty()]
    [String]$Limit = "100" 
    )

    try {                
        switch ($PsCmdlet.ParameterSetName) 
        { 
            "ById"  {                
                
                foreach ($StorageReservationPolicyId in $Id){

                    $URI = "/reservation-service/api/reservations/policies/$($StorageReservationPolicyId)"

                    # --- Run vRA REST Request
                    $Response = Invoke-vRARestMethod -Method GET -URI $URI

                    [pscustomobject]@{

                        Name = $Response.name
                        Id = $Response.id                
                        Description = $Response.description
                        CreatedDate = $Response.createdDate
                        LastUpdated = $Response.lastUpdated
                        ReservationPolicyTypeId = $Response.reservationPolicyTypeId
                    }
                }                              
            
                break
            }

            "ByName"  {                

                foreach ($StorageReservationPolicyName in $Name){

                    $URI = "/reservation-service/api/reservations/policies?`$filter=name%20eq%20'$($StorageReservationPolicyName)'&reservationPolicyTypeId%20eq%20'Infrastructure.Reservation.Policy.Storage'"

                    # --- Run vRA REST Request
                    $Response = Invoke-vRARestMethod -Method GET -URI $URI

                    foreach ($StorageReservationPolicy in $Response.content){

                        [pscustomobject]@{

                            Name = $StorageReservationPolicy.name
                            Id = $StorageReservationPolicy.id                
                            Description = $StorageReservationPolicy.description
                            CreatedDate = $StorageReservationPolicy.createdDate
                            LastUpdated = $StorageReservationPolicy.lastUpdated
                            ReservationPolicyTypeId = $StorageReservationPolicy.reservationPolicyTypeId
                        }
                    }
                }
                
                break
            }

            "Standard"  {

                $URI = "/reservation-service/api/reservations/policies?`$filter=reservationPolicyTypeId%20eq%20'Infrastructure.Reservation.Policy.Storage'"

                # --- Run vRA REST Request
                $Response = Invoke-vRARestMethod -Method GET -URI $URI

                foreach ($StorageReservationPolicy in $Response.content){

                    [pscustomobject]@{

                        Name = $StorageReservationPolicy.name
                        Id = $StorageReservationPolicy.id                
                        Description = $StorageReservationPolicy.description
                        CreatedDate = $StorageReservationPolicy.createdDate
                        LastUpdated = $StorageReservationPolicy.lastUpdated
                        ReservationPolicyTypeId = $StorageReservationPolicy.reservationPolicyTypeId
                    }
                }
                
                break
            }
        }
    }
    catch [Exception]{

        throw
    }
}