functions/Get-ZGGroup.ps1

function Get-ZGGroup {
    [CmdletBinding(DefaultParameterSetName = 'ByNull')]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByGroupIds')]
        [long[]] $GroupId,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByHostIds')]
        [long[]] $HostId,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByMaintenanceIds')]
        [long[]] $MaintenanceId,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByTriggerIds')]
        [long[]] $TriggerId
    )
    Begin {
        $parameters = @{
            output = "extend"
        }

        switch ($PSCmdlet.ParameterSetName) {
            'ByGroupIds' { $parameters.groupids = $GroupId }
            'ByHostIds' { $parameters.hostids = $HostId }
            'ByMaintenanceIds' { $parameters.maintenanceids = $MaintenanceId }
            'ByTriggerIds' { $parameters.triggerids = $TriggerId }
        }
    }

    Process {
        $response = Invoke-ZGRequest -Method "POST" -Body @{
            "method" = "hostgroup.get"
            "params" = $parameters
            "auth"   = $script:RequestAuth
        } 

        $response.result
    } 
}