Public/Get-DMFailoverGroup.ps1

function Get-DMFailoverGroup {
    <#
    .SYNOPSIS
        Gets OceanStor failover groups.
    #>

    [CmdletBinding(DefaultParameterSetName = 'All')]
    [OutputType([System.Collections.ArrayList])]
    param(
        [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [pscustomobject]$WebSession,

        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'ById', ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$Id,

        [Parameter(Position = 0, ParameterSetName = 'ByName')]
        [ValidateLength(1, 255)]
        [ValidatePattern('^[A-Za-z0-9_.-]+$')]
        [string]$Name,

        [Parameter(ParameterSetName = 'All')]
        [Parameter(ParameterSetName = 'ByName')]
        [ValidateRange(0, 999999)]
        [int]$RangeStart,

        [Parameter(ParameterSetName = 'All')]
        [Parameter(ParameterSetName = 'ByName')]
        [ValidateRange(1, 10000)]
        [int]$RangeEnd
    )

    $session = if ($WebSession) { $WebSession } else { $script:CurrentOceanstorSession }
    $defaultDisplaySet = 'Id', 'Name', 'Failover Group Type', 'Description', 'Service Type'
    $displayPropertySet = New-Object System.Management.Automation.PSPropertySet(
        'DefaultDisplayPropertySet',
        [string[]]$defaultDisplaySet
    )
    $standardMembers = [System.Management.Automation.PSMemberInfo[]]@($displayPropertySet)

    if ($PSCmdlet.ParameterSetName -eq 'ById') {
        $response = Invoke-DeviceManager -WebSession $session -Method 'GET' -Resource "failovergroup/$([uri]::EscapeDataString($Id))" | Select-DMResponseData
        $groups = [System.Collections.ArrayList]@([OceanStorFailoverGroup]::new($response, $session))
    }
    else {
        $query = @()
        if ($Name) {
            $query += "filter=NAME::$([uri]::EscapeDataString($Name))"
        }
        if ($PSBoundParameters.ContainsKey('RangeStart') -or $PSBoundParameters.ContainsKey('RangeEnd')) {
            $start = if ($PSBoundParameters.ContainsKey('RangeStart')) { $RangeStart } else { 0 }
            $end = if ($PSBoundParameters.ContainsKey('RangeEnd')) { $RangeEnd } else { 100 }
            $query += "range=[$start-$end]"
        }

        $resource = 'failovergroup'
        if ($query.Count -gt 0) {
            $resource += "?$($query -join '&')"
        }

        $response = Invoke-DeviceManager -WebSession $session -Method 'GET' -Resource $resource | Select-DMResponseData
        $groups = New-Object System.Collections.ArrayList
        foreach ($group in @($response)) {
            if ($null -eq $group) { continue }
            $groupObject = [OceanStorFailoverGroup]::new($group, $session)
            [void]$groups.Add($groupObject)
        }
    }

    $groups | ForEach-Object {
        $_ | Add-Member MemberSet PSStandardMembers $standardMembers -Force
    }

    return $groups
}

Set-Alias -Name Get-DMFailoverGroups -Value Get-DMFailoverGroup