Toolkit/Public/Get-RscManagedVolume.ps1

#Requires -Version 3
function Get-RscManagedVolume {
    <#
    .SYNOPSIS
    Retrieves Managed Volumes from Rubrik Security Cloud.

    .DESCRIPTION
    Returns Persistent Mount Managed Volumes managed by Rubrik. These volumes are
    externally controlled by the user (unlike SLA-managed volumes). You can list all
    volumes or filter by name or cluster.

    .LINK
    Schema reference:
    https://rubrikinc.github.io/rubrik-api-documentation/schema/reference

    .PARAMETER List
    Return all items. This is the default behavior.

    .PARAMETER Name
    Filter by name. Exact match on the Managed Volume name.

    .PARAMETER RscCluster
    A Rubrik cluster object to filter by. Pipe from Get-RscCluster.

   
    .PARAMETER AsQuery
    Return the query object instead of running the query.
    Preliminary read-only queries may still run to gather IDs or
    other data needed to build the main query.
    .EXAMPLE
    # Get all Managed Volumes
    Get-RscManagedVolume -List

    .EXAMPLE
    # Get a Managed Volume by name
    Get-RscManagedVolume -Name rp-mysql-01

    .EXAMPLE
    # Get Managed Volumes on a specific cluster
    Get-RscCluster -Name "cluster-east" | Get-RscManagedVolume -List
    #>


    [CmdletBinding(
        DefaultParameterSetName = "List"
    )]
    Param(
        [Parameter(
            ParameterSetName = "List",
            Mandatory = $false, 
            ValueFromPipeline = $false
        )]
        [Switch]$List,

        [Parameter(
            ParameterSetName = "Name",
            Mandatory = $false, 
            ValueFromPipeline = $false
        )][String]$Name,
        
        [Parameter(
            Mandatory = $false
        )][RubrikSecurityCloud.Types.Cluster]$RscCluster,
        [Parameter(
            Mandatory = $false,
            ValueFromPipeline = $false,
            HelpMessage = "Return the query object instead of running the query"
        )][Switch]$AsQuery
    )
    
    Process {
        Write-Debug "-Running Get-RscManagedVolume"

        # Determine field profile:
        $fieldProfile = "DEFAULT"
        if ( $Detail -eq $true ) {
            $fieldProfile = "DETAIL"
        }

        $query = New-RscQuery -Gql managedVolumes -FieldProfile $fieldProfile 
        $query.Var.filter = @()

        #region Create Query
        if($Name) {
            $nameFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter
            $nameFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::NAME_EXACT_MATCH
            $nameFilter.texts = $Name
            $query.Var.filter += $nameFilter
        }
        if($RscCluster) {
            $clusterFilter = New-Object -TypeName RubrikSecurityCloud.Types.Filter
            $clusterFilter.Field = [RubrikSecurityCloud.Types.HierarchyFilterField]::CLUSTER_ID
            $clusterFilter.texts = $RscCluster.Id
            $query.Var.filter += $clusterFilter
        }
        
        #endregion
        if ( $AsQuery ) { return $query }
        $result = $query.Invoke()
        $result.Nodes
    }
}