functions/Set-ZGHost.ps1

function Set-ZGHost {
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $True)]
        [long] $HostId,
        [Parameter(Mandatory = $false)]
        [long] $GroupId,
        [Parameter(Mandatory = $false)]
        [int] $Status,
        [Parameter(Mandatory = $false)]
        [string] $Hostname,
        [Parameter(Mandatory = $false)]
        [string] $Name,
        [Parameter(Mandatory = $false)]
        [string] $Descritpion,
        [Parameter(Mandatory = $false)]
        [long[]] $TemplateId,
        [Parameter(Mandatory = $false)]
        [long[]] $UnlinkTemplateId
    )
    Begin {
        $parameters = @{
            hostid = $HostId
        }

        if ($PSBoundParameters.ContainsKey('Status')) {
            $parameters.status = $Status
        }

        if ($PSBoundParameters.ContainsKey('Name')) {
            $parameters.name = $Name
        }

        if ($PSBoundParameters.ContainsKey('Hostname')) {
            $parameters.host = $Hostname
        }
        
        if ($PSBoundParameters.ContainsKey('Description')) {
            $parameters.description = $Description
        }
        if ($PSBoundParameters.ContainsKey('TemplateId')) {
            $parameters.templates = (Get-ZGTemplate -TemplateId $TemplateId | Select-Object -Property templateid) 
        }

        if ($PSBoundParameters.ContainsKey('UnlinkTemplateId')) {
            $parameters.templates_clear = (Get-ZGTemplate -TemplateId $UnlinkTemplateId | Select-Object -Property templateid) 
        }
    }

    Process {
        $response = Invoke-ZGRequest -Method "POST" -Body @{
            "jsonrpc" = "2.0"
            "method"  = "host.update"
            "params"  = $parameters
            "auth"    = $script:RequestAuth
            "id"      = $script:RequestID
        } 

        $response.result
    } 
}