Public/Get-OVGDStorageSystem.ps1

function Get-OVGDStorageSystem {
    <#
        .SYNOPSIS
            Retrieves the Storage Systems connected to the Global Dashboard instance
        .DESCRIPTION
            This function will retrieve the Storage Systems on the specified Global Dashboard instance
        .NOTES
            Info
            Author : Rudi Martinsen / Intility AS
            Date : 25/03-2019
            Version : 0.4.0
            Revised : 25/04-2019
            Changelog:
            0.4.0 -- Reworked output
            0.3.0 -- Changed Entity parameter to Id, adding Name alias
            0.2.0 -- Added support for querying and changed warning when result is bigger than count
            0.1.2 -- Fixed bug in help text and added link
            0.1.1 -- Added help text
        .LINK
            https://github.com/rumart/GlobalDashboardPS
        .LINK
            https://developer.hpe.com/blog/accessing-the-hpe-oneview-global-dashboard-api
        .LINK
            https://rudimartinsen.com/2019/04/23/hpe-oneview-global-dashboard-powershell-module/
        .PARAMETER Server
            The Global Dashboard to retrieve Storage System from
        .PARAMETER Id
            The Id of the Storage System to retrieve
        .PARAMETER StorageSystemName
            Filter on the ServerName of Storage System to retrieve. Note that we search for an exact match
        .PARAMETER PrimaryKey
            Filter on PrimaryKey of Storage System to retrieve. Note that we search for an exact match
        .PARAMETER Family
            Filter on Family of Storage System to retrieve. Note that we search for an exact match
        .PARAMETER SupportsFC
            Filter on Storage System that has SupportsFC set to true. Note that we search for an exact match
        .PARAMETER SupportsISCSI
            Filter on Storage System that has SupportsFC set to true. Note that we search for an exact match
        .PARAMETER Status
            Filter on Status of Storage System to retrieve. Note that we search for an exact match
        .PARAMETER State
            Filter on State of Storage System to retrieve. Note that we search for an exact match
        .PARAMETER UserQuery
            Query string used for full text search
        .PARAMETER Count
            The count of hardware to retrieve, defaults to 25
        .EXAMPLE
            PS C:\> Get-OVGDStorageSystem
 
            Retrieves all Storage Systems connected to the Global Dashboard instance
        .EXAMPLE
            PS C:\> Get-OVGDStorageSystem -Id xxxxxxxx-xxxx-xxxx-xxxx-54e195f27f36
 
            Retrieves the specific Storage Systems with the specified ID
        .EXAMPLE
            PS C:\> Get-OVGDStorageSystem -StorageSystemName my-system-name-001
 
            Searches for a Storage System with the specified name
        .EXAMPLE
            PS C:\> Get-OVGDStorageSystem -UserQuery "Proliant DL360"
 
            Performs a full text search and matches all attributes for the specified string
    #>

    [CmdletBinding(DefaultParameterSetName="Default")]
    param (
        [Parameter(ParameterSetName="Default")]
        [Parameter(ParameterSetName="Id")]
        [Parameter(ParameterSetName="Query")]
        $Server = $Global:OVGDPSServer,
        [Parameter(ParameterSetName="Id")]
        [alias("Entity")]
        $Id,
        [Parameter(ParameterSetName="Query")]
        [alias("Name")]
        $StorageSystemName,
        [Parameter(ParameterSetName="Query")]
        $PrimaryKey,
        [Parameter(ParameterSetName="Query")]
        [switch]
        $SupportsFC,
        [Parameter(ParameterSetName="Query")]
        [switch]
        $SupportsISCSI,
        [Parameter(ParameterSetName="Query")]
        [ValidateSet("StoreServ","StoreVirtual")]
        $Family,
        [Parameter(ParameterSetName="Query")]
        [ValidateSet("OK","Warning","Critical","Disabled","Unknown")]
        $Status,
        [Parameter(ParameterSetName="Query")]
        [ValidateSet("Configured","Unknown")]
        $State,
        [Parameter(ParameterSetName="Query")]
        $UserQuery,
        [Parameter(ParameterSetName="Default")]
        [Parameter(ParameterSetName="Query")]
        $Count = 25
    )

    begin {
        $ResourceType = "storage-systems"
    }

    process {
        $Resource = BuildPath -Resource $ResourceType -Entity $Id
        $Query = "count=$Count"
        $searchFilters = @()
        $txtSearchFilters = @()

        if($StorageSystemName){
            $searchFilters += 'name EQ "' + $StorageSystemName + '"'
        }

        if($PrimaryKey){
            $searchFilters += 'primaryKey EQ "' + $PrimaryKey + '"'
        }

        if($Family){
            $searchFilters += 'family EQ "' + $Family + '"'
        }

        if($SupportsFC){
            $searchFilters += 'supportsFC EQ "true"'
        }

        if($SupportsISCSI){
            $searchFilters += 'supportsISCSI EQ "true"'
        }

        if($Status){
            $searchFilters += 'status EQ "' + $Status + '"'
        }
        
        if($UserQuery){
            $txtSearchFilters += "$UserQuery"
        }

        if($searchFilters){
            $filterQry = $searchFilters -join " AND "
            $Query += '&query="' + $filterQry + '"'
        }

        if($txtSearchFilters){
            $filterQry = $txtSearchFilters -join " AND "
            $Query += '&userQuery="' + $filterQry + '"'
        }
        
        $result = Invoke-OVGDRequest -Resource $Resource -Query $Query

        Write-Verbose "Got $($result.count) number of results"

        if ($result.Count -lt $result.Total ) {
            Write-Warning "The result has been paged. Total number of results is: $($result.total)"
        }
        
        if($result.Count -ge 1){
            Write-Verbose "Found $($result.total) number of results"
            $output = $result.members
        }
        elseif($result.Count -eq 0){
            return $null
        }
        elseif($result.category -eq $ResourceType){
            $output = $result
        }
        else{
            return $result
        }

        if($Output){
            $output = Add-OVGDTypeName -TypeName "GlobalDashboardPS.OVGDStorageSystem" -Object $output
            return $output
        }

    }

    end {
    }
}