Scripts/StorageDomain/Get-CohesityStorageDomain.ps1

function Get-CohesityStorageDomain {
    <#
        .SYNOPSIS
        Request to fetch all storage domain (view box) filtered by specified parameters.
        .DESCRIPTION
        The Get-CohesityStorageDomain function is used to fetch list of all storage domain (view box) information using REST API or specific storage domain information based on specified parameters. If no parameters are specified, all storage domains (view boxes) on the Cohesity Cluster are returned. Specifying parameters filters the results that are returned.
        .EXAMPLE
        Get-CohesityStorageDomain
        List all storage domain (view box).
        .EXAMPLE
        Get-CohesityStorageDomain -Names [<string>]
        Returns the storage domain (view box) that are filtered out by specified name.
        .EXAMPLE
        Get-CohesityStorageDomain -Ids [<long>]
        Returns the storage domain (view box) that are filtered out by specified ids.
        .EXAMPLE
        Get-CohesityStorageDomain -ClusterPartitionIds [<long>]
        Returns the storage domain (view box) that are filtered out by specified cluster partition ids.
        .EXAMPLE
        Get-CohesityStorageDomain -FetchStats
        Specifies whether to include usage and performance statistics information along with the list of storage domain (view box). If parameter is not mentioned, statistics information won't be fetched.
    #>

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory = $false)]
        [long[]]$ClusterPartitionIds = $null,
        [Parameter(Mandatory = $false)]
        [switch]$FetchStats,
        [Parameter(Mandatory = $false)]
        [long[]]$Ids = $null,
        [Parameter(Mandatory = $false)]
        [string[]]$Names = $null
    )

    Begin {
        if (-not (Test-Path -Path "$HOME/.cohesity")) {
            throw "Failed to authenticate. Please connect to the Cohesity Cluster using 'Connect-CohesityCluster'"
        }
        $session = Get-Content -Path $HOME/.cohesity | ConvertFrom-Json

        $server = $session.ClusterUri

        $token = $session.Accesstoken.Accesstoken
    }

    Process {
        # Form query parameters
        $Parameters = [ordered]@{}

        $Parameters.Add('allUnderHierarchy', $true)
        if ($null -ne $ClusterPartitionIds) {
            $Parameters.Add('clusterPartitionIds', $ClusterPartitionIds -join ',')
        }
        if ($null -ne $Ids) {
            $Parameters.Add('ids', $Ids -join ',')
        }
        if ($null -ne $Names) {
            $Parameters.Add('names', $Names -join ',')
        }
        if ($FetchStats.IsPresent) {
            $Parameters.Add('fetchStats', $true)
        }

        $queryString = $null
        if ($null -ne $Parameters.Keys) {
            $queryString = '?' + ($Parameters.Keys.ForEach({"$_=$($Parameters.$_)"}) -join '&')
        }

        # Construct URL & header
        $url = $server + '/irisservices/api/v1/public/viewBoxes'
        $url = $url + $queryString
        $headers = @{'Authorization' = 'Bearer ' + $token }

        $StorageDomainList = Invoke-RestApi -Method 'Get' -Uri $url -Headers $headers
        $StorageDomainList

        if ($null -eq $StorageDomainList) {
            if ($Global:CohesityAPIError) {
                if ($Global:CohesityAPIError.StatusCode -eq 'NotFound') {
                    $errorMsg = "Storage domain (View Box) doesn't exist."
                    Write-Warning $errorMsg
                } else {
                    $errorMsg = "Failed to fetch Storage Domain (View Box) information with an error : " + $Global:CohesityAPIError
                }
            } else {
                $errorMsg = "Storage domain (View Box) doesn't exist."
                Write-Warning $errorMsg
            }
            CSLog -Message $errorMsg
        }
    } # End of process
} # End of function