Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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: $_"
}
Hi @TomD,
I believe you are missing a permission for your sa_api user.
Try something like this:
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
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