functions/Invoke-ZGRequest.ps1

function Invoke-ZGRequest {
    param (
        [uri] $Uri,
        [string] $Version,
        [string] $Method,
        [hashtable] $Body
    )
    
    if(-not [string]::IsNullOrEmpty($Uri.OriginalString)){
        $script:Uri = $Uri.OriginalString
    }

    if(-not [string]::IsNullOrEmpty($Version)){
        $script:Version = $Version
    }

    $params = $script:LastRequest

    $Body['jsonrpc'] = $script:Version
    $Body['id'] = $script:RequestID

    $params.Body = ($Body | ConvertTo-Json)
    $params.Headers = @{"Content-Type" = "application/json" }
    $params.Method = $Method
    $params.Uri = $script:Uri

    $script:RequestID++
    $script:LastRequest = $params

    try {
        $result = Invoke-WebRequest @params
        return $result.Content | ConvertFrom-Json
    }
    catch {
        Write-Host $Body
        Write-Host $result
    }
}