Qlik Community

Qlik Sense Integration, Extensions, & APIs

Discussion board where members can learn more about Integration, Extensions and API’s for Qlik Sense.

martinmichalski
New Contributor II

QRS Integration with Powershell 2.0

Hello Community,

I am trying to reload a task using QRS API integration. The idea is to call Powershell from a Qlikview Document so it reloads a QlikSense document after it finishes.

I am being able to reload by using Postman. Here is the Request.bin request:

POST https://{host}/qrs/task/{taskid}/start/synchronous?xrfkey=ABCDEFG123456789

QUERYSTRING:

xrfkey: ABCDEFG123456789

HEADERS:

X-Qlik-Xrfkey: ABCDEFG123456789

Cf-Visitor: {"scheme":"http"}

Connection: close

Content-Type: application/x-www-form-urlencoded

However, I am not being able to do this using Powershell v2.

Looking at the documentation in Qlik Branch I saw this code that allows us to communicate using Powershell:

$req = New-Object System.Net.WebClient

$req.Credentials = [System.Net.CredentialCache]:Smiley Very HappyefaultCredentials

$req.QueryString.Add("xrfkey", "ABCDEFG123456789")

$req.Headers.Add("X-Qlik-xrfkey", "ABCDEFG123456789")

[Net.ServicePointManager]:Smiley FrustratederverCertificateValidationCallback = {$true}

$req.Headers.Add("Cf-Visitor", ‘{"scheme":"http"}‘);

$req.DownloadString("https://{host}/qrs/task/{taskid}/start/synchronous"

This is working, but as it is a GET request, it just downloads the URL, without reloading the task. I need to do a POST request.

I tried using the command Invoke-WebRequest, but is not available on this version.

Does anyone no how can I do it without Invoke-WebRequest?

Thank you in advance,

Martin

2 Replies
teiswamsler
Contributor II

Re: QRS Integration with Powershell 2.0

Hi Martin

I currently have the same problem, got the POST command working in Postman. But cant get it to work in PS.

Have you found a solution wet?

/Teis

martinmichalski
New Contributor II

Re: QRS Integration with Powershell 2.0

Hi Teis,

Sorry for the late reply. I discovered that Postman uses Windows Authentication method, so it works if you already had an opened session with the server (I believe it's enough by logging into the hub or the qmc). That's why you need to make a GET call before the POST, so you go through the authentication module.

However, if you use the server credentials by installing the windows client certificate in the machine that is executing the call you should be able to communicate with the API.

Then you can get the certificate with this command:

$cert = Get-Childitem cert:\CurrentUser\My\ | where { $_.subject -eq "CN=YourCertName" }

And include it in the request by ClientCertificates.Add:

$web = [System.Net.WebRequest]::Create($url)

$web.ClientCertificates.Add($cert)

$web.Method = "POST"

Remember you also need to add headers for the x-qlik-xrfkey: ABCDEFG123456789 and the X-Qlik-User: UserDirectory=Internal;UserId=sa_repository

Hope it helped.

Community Browser