functions/Get-ZGMaintenace.ps1

function Get-ZGTemplate {
    [CmdletBinding(DefaultParameterSetName = 'ByNull')]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByMaintenanceIds')]
        [long[]] $MaintenanceId,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True, ParameterSetName = 'ByGroupIds')]
        [long[]] $GroupId,

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

    Begin {
        $parameters = @{
            output = "extend"
        }

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

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

        $response.result
    }
}