functions/core.ps1

$script:guid = "^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$"
$script:isDate = "^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$"
if( $qlik_output_raw ) { $rawOutput = $true }

function CallRestUri($method, $path, $extraParams) {
  Write-Verbose "Raw output: $rawOutput"
  If( $null -eq $Script:prefix ) { Connect-Qlik > $null }
  If( ! $path.StartsWith( "http" ) ) {
    $path = $Script:prefix + $path
  }

  $xrfKey = GetXrfKey
  If( $path.contains("?") ) {
    $path += "&xrfkey=$xrfKey"
  } else {
    $path += "?xrfkey=$xrfKey"
  }
  $params = DeepCopy $api_params
  If( $extraParams ) { $params += $extraParams }
  If( !$params.Header ) { $params.Header = @{} }
  If( !$params.Header.ContainsKey("x-Qlik-Xrfkey") ) {
    Write-Verbose "Adding header x-Qlik-Xrfkey: $xrfKey"
    $params.Header.Add("x-Qlik-Xrfkey", $xrfKey)
  }
  If( $params.Body ) { Write-Verbose $params.Body }

  Write-Verbose "Calling $method for $path"
  try {
    If( $null -eq $script:webSession ) {
      $result = Invoke-RestMethod -Method $method -Uri $path @params -SessionVariable webSession
      $script:webSession = $webSession
    } elseif ($params.OutFile -or $params.InFile) {
      $ProgressPreference = 'SilentlyContinue'
      $result = (Invoke-WebRequest -Method $method -Uri $path @params -WebSession $script:webSession).Content | ConvertFrom-Json
    } else {
      $result = Invoke-RestMethod -Method $method -Uri $path @params -WebSession $script:webSession
    }
  }
  catch {
    throw $_
    return
  }

  if( !$rawOutput ) {
    Write-Verbose "Formatting response"
    $result = FormatOutput($result)
  }

  return $result
}

function DeepCopy($data) {
  $copy=@{}
  $data.Keys | ForEach-Object {
    $copy.Add($_, $(
      if($data.$_.GetType().Name -eq 'HashTable') {
        DeepCopy($data.$_)
      } else {
        $data.$_
      }
    ))
  }
  return $copy
}