Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
TomD
Contributor II
Contributor II

Start reload task via powershell

Hello everyone

Maybe you could help me before I go completely crazy 😉

I start the reload of a task via Powershell.
This also works great.

But I have to wait for it to complete before I can continue.
And that's where the problem starts.

I get a Forbidden 403 when querying.
But the execution works.

Many thanks in advance

The call:

PS C:\scripts> .\ReloadZZZ.ps1
Task 'Manually triggered reload of LN Tools' gefunden mit ID: cec2c459-3cc3-4d3c-9c2f-dfc19d67651f
Starte Task mit URI: https://qlik.com:4242/qrs/task/cec2c459-3cc3-4d3c-9c2f-dfc19d67651f/start/synchronous?xrfkey=JLUlSma...
Task erfolgreich gestartet. Response: @{value=542fe52e-eb56-4657-abca-b77d4d125a33}
Überprüfe den Status des Tasks...
C:\scripts\ReloadZZZ.ps1 : Fehler beim Starten des Tasks oder Abrufen des Status: The remote server returned an error:
(403) Forbidden.
At line:1 char:1
+ .\ReloadZZZ.ps1
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,ReloadZZZ.ps1

The Script:

# TrustAllCertsPolicy Definition – Verhindert Zertifikatwarnungen
if (-not ("TrustAllCertsPolicy" -as [type])) {
Add-Type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

public static class TrustAllCertsPolicy {
public static void Ignore() {
ServicePointManager.ServerCertificateValidationCallback =
delegate (object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) {
return true;
};
}
}
"@
}

[TrustAllCertsPolicy]::Ignore()
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# === Konfiguration ===
$qlikServer = "https://qlik.server.com:4242"
$taskName = "Manually triggered reload of LN Tools" # Task Name, der gestartet werden soll
$certPath = "C:\QlikCerts\s-reb46\client.pfx" # Zertifikatspfad
$certPassword = "password" # Zertifikatspasswort

# XRF-Key generieren
$xrfkey = -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 16 | ForEach-Object {[char]$_})


# Header vorbereiten
$headers = @{
"X-Qlik-User" = "UserDirectory=INTERNAL;UserId=sa_api" # Benutzername für API-Authentifizierung
"x-qlik-xrfkey" = $xrfkey
"Content-Type" = "application/json"
"Accept" = "application/json"
}

# Zertifikat laden
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certPath, $certPassword, "Exportable,PersistKeySet")

# URL zum Abrufen aller Tasks
$tasksUri = "$qlikServer/qrs/task?xrfkey=$xrfkey"
$taskId = $null

# Suche nach dem Task mit dem angegebenen Namen
try {
$tasks = Invoke-RestMethod -Uri $tasksUri -Method GET -Headers $headers -Certificate $cert -UseBasicParsing
foreach ($task in $tasks) {
if ($task.name -eq $taskName) {
$taskId = $task.id
Write-Host "Task '$taskName' gefunden mit ID: $taskId"
break
}
}

if (-not $taskId) {
Write-Host "Kein Task mit dem Namen '$taskName' gefunden!"
return
}

# URL zum Starten des Tasks
$startUri = "$qlikServer/qrs/task/$taskId/start/synchronous?xrfkey=$xrfkey"
Write-Host "Starte Task mit URI: $startUri"

# Task starten
$response = Invoke-RestMethod -Uri $startUri -Method POST -Headers $headers -Certificate $cert -UseBasicParsing
Write-Host "Task erfolgreich gestartet. Response: $response"

# Überprüfen, ob der Task erfolgreich abgeschlossen wurde
$statusUri = "$qlikServer/qrs/reloadtask/$taskId?xrfkey=$xrfkey"
$taskStatus = ""

# Schleife zur Überprüfung des Status
do {
Start-Sleep -Seconds 5 # Alle 5 Sekunden den Status abfragen
Write-Host "Überprüfe den Status des Tasks..."

$taskStatus = Invoke-RestMethod -Uri $statusUri -Method GET -Headers $headers -Certificate $cert -UseBasicParsing
$status = $taskStatus.operational.lastExecutionResult.status
Write-Host "Aktueller Task-Status: $status"
} while ($status -eq "1" -or $status -eq "2") # Task wartet oder ist noch in Bearbeitung

# Status auswerten und Rückmeldung geben
switch ($status) {
3 { Write-Host "Task wurde erfolgreich abgeschlossen." } # Task erfolgreich
4 { Write-Warning "Task ist fehlgeschlagen." } # Task fehlgeschlagen
6 { Write-Host "Task wurde abgebrochen." } # Task abgebrochen
default { Write-Host "Unbekannter Task-Status: $status" } # Unbekannter Status
}

} # Hier fehlte die schließende geschweifte Klammer für den try-Block
catch {
Write-Error "Fehler beim Starten des Tasks oder Abrufen des Status: $_"
}

Labels (2)
2 Replies
marksouzacosta

Hi @TomD,

I believe you are missing a permission for your sa_api user.
Try something like this:

marksouzacosta_1-1746450153767.png

 

In any case, I think you should give a try to Qlik CLI. It is easy to integrate with PowerShell and to execute all the commands you need: https://qlik.dev/toolkits/qlik-cli/

 

Regards,

Mark Costa

 

Read more at Data Voyagers - datavoyagers.net
Follow me on my LinkedIn | Know IPC Global at ipc-global.com

TomD
Contributor II
Contributor II
Author

Hello @marksouzacosta,

First of all, sorry for the late reply.

The error still occurs even though I followed your suggestion.

 

Can you give me an example script for the qlik-cli?

I can't seem to get anything to work.

 

Tom