277 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			PowerShell
		
	
	
	
	
	
| <#
 | |
| .SYNOPSIS
 | |
|     <Overview of script>
 | |
| 
 | |
| .NOTES
 | |
|     Version        : 1.0
 | |
|     Author         : Hubert CORNET
 | |
|     Creation Date  : <Date>
 | |
|     Purpose/Change : <Initial script development>
 | |
| 
 | |
| .LINK
 | |
|     https://www.tips-of-mine.fr
 | |
| 
 | |
| .EXEMPLE
 | |
|     <Example goes here. Repeat this attribute for more than one example>
 | |
| 
 | |
| .DESCRIPTION
 | |
|     <Brief description of script>
 | |
| 
 | |
| .PARAMETER <Parameter_Name>
 | |
|     <Brief description of parameter input required. Repeat this attribute if required>
 | |
| 
 | |
| .INPUTS
 | |
|     <Inputs if any, otherwise state None>
 | |
| 
 | |
| .OUTPUTS
 | |
|     <Outputs if any, otherwise state None - example: Log file stored in C:\Windows\Temp\<name>.log>
 | |
| #>
 | |
| 
 | |
| #---------------------------------------------------------[Initialisations]--------------------------------------------------------
 | |
| 
 | |
| param(
 | |
|     [string] $serverUrl = "https://srvtst.acme.com",
 | |
|     [string] $QlikUser = "user@domain",
 | |
|     [string] $TaskId = "xxxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx",
 | |
|     [int] $PollingInterval = 5
 | |
|     )
 | |
| 
 | |
| # Définir l'action d'erreur pour continuer silencieusement
 | |
| $ErrorActionPreference = "SilentlyContinue"
 | |
| 
 | |
| # Bibliothèques de fonctions requises
 | |
| 
 | |
| # Initial Setup
 | |
| Initial-Setup -serverUrl $serverUrl -QlikUser $QlikUser
 | |
| 
 | |
| #----------------------------------------------------------[Declarations]----------------------------------------------------------
 | |
| 
 | |
| # Version Script
 | |
| $sScriptVersion = "1.0"
 | |
| 
 | |
| #Log File Info
 | |
| $sLogPath = "C:\Tmp"
 | |
| $sLogName = "<script_name>.log"
 | |
| $sLogFile = Join-Path -Path $sLogPath -ChildPath $sLogName
 | |
| 
 | |
| #-----------------------------------------------------------[Functions]------------------------------------------------------------
 | |
| 
 | |
| function Ignore-SelfSignedCerts {
 | |
|     add-type -TypeDefinition  @"
 | |
|         using System.Net;
 | |
|         using System.Security.Cryptography.X509Certificates;
 | |
|         public class TrustAllCertsPolicy : ICertificatePolicy {
 | |
|             public bool CheckValidationResult(
 | |
|                 ServicePoint srvPoint, X509Certificate certificate,
 | |
|                 WebRequest request, int certificateProblem) {
 | |
|                 return true;
 | |
|             }
 | |
|         }
 | |
| "@
 | |
|     [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
 | |
| }
 | |
| 
 | |
| function LogConsole($string)
 | |
| {
 | |
|    
 | |
|    $TimeStamp = (Get-date -Format dd-MM-yyyy) + " " + (get-date -format HHMMsstt) 
 | |
|    $TimeStamp += " " + $string 
 | |
| 
 | |
|    write-host $TimeStamp
 | |
| }
 | |
| 
 | |
| function Invoke-QlikRestMethod {
 | |
|     param(
 | |
|         [ValidateNotNullorEmpty()]
 | |
|         [String]$Uri,
 | |
|         [ValidateNotNullorEmpty()]
 | |
|         [String]$Method,
 | |
|         [object]$Body = $null
 | |
|     )
 | |
| 
 | |
|     $uriFull = $Global:QlikProxyRESTApiUrl + $Uri
 | |
|     
 | |
|     #LogConsole ( "Sending Web Request... : $($uriFull)")
 | |
| 
 | |
|     try
 | |
|     {
 | |
|         if ($null -eq $Body)
 | |
|         {
 | |
|             $response = Invoke-RestMethod -Method $Method -Uri $uriFull -Headers $Global:QlikRESTApiAuthHeader -ErrorVariable $RestException
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             $Body = ConvertTo-Json $Body -Depth 99
 | |
|             $response = Invoke-RestMethod -Method $Method -Uri $uriFull -Headers $Global:QlikRESTApiAuthHeader -Body $Body -ContentType 'application/json; charset=utf-8' -ErrorVariable $RestException
 | |
|         }
 | |
|         return $response
 | |
|     }
 | |
|     catch
 | |
|     {
 | |
|         Write-Warning ("Error")
 | |
|         Write-Warning ("StatusCode: " + $_.Exception.Response.StatusCode.value__)
 | |
|         Write-Warning ("StatusDescription: " + $_.Exception.Response.StatusDescription)
 | |
|         Write-Warning ("Message: " + $_.Exception.Message)
 | |
|         
 | |
|         throw
 | |
|         ##exit $_.Exception.Response.StatusCode.value__
 | |
|     }
 | |
| }
 | |
| 
 | |
| function Get-QlikApiAuthHeader {
 | |
|     param(
 | |
|         [string] $Token
 | |
|         )
 | |
|         $authHeader = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
 | |
|         $authHeader.Add("X-Qlik-xrfkey", ("ABCDEFG123456789"))
 | |
|         $authHeader.Add("opcon-usr", ($QlikUser))
 | |
|         
 | |
|         return $authHeader
 | |
|     }
 | |
|     
 | |
|     function Initial-Setup {
 | |
|         [cmdletbinding()]
 | |
|         param(
 | |
|             [string] $serverUrl ,
 | |
| 	        [string] $QlikUser 
 | |
|             )
 | |
|             LogConsole ("")
 | |
|             LogConsole ("*********************************************************")
 | |
|             LogConsole ("  OpCon Start Task on Qlik")
 | |
|             LogConsole ("  QlikUser            : " + $QlikUser)
 | |
|             
 | |
|             $serverUrl = $serverUrl.ToLower().TrimEnd("/")
 | |
|             $serverUrl = -join($serverUrl, "/opcon/qrs")
 | |
|         
 | |
|             LogConsole ("  Qlik API server url : " + $serverUrl)
 | |
|             LogConsole ("  Polling interval    : " + $PollingInterval)
 | |
|             LogConsole ("  TaskID              : " + $TaskId)
 | |
|             
 | |
|             LogConsole ("*********************************************************")
 | |
|             
 | |
|             $Global:QlikProxyRESTApiUrl = $serverUrl
 | |
|         
 | |
|             $Global:QlikRESTApiAuthHeader = Get-QlikApiAuthHeader 
 | |
|             
 | |
|         } 
 | |
|  
 | |
|  function GetQlikAboutInfo
 | |
|  {
 | |
|  [cmdletbinding()]
 | |
|  param( )
 | |
|  
 | |
|         LogConsole ("Get Infos from Qlik Server")
 | |
|       
 | |
|         
 | |
| 
 | |
|         $infoUri = "/about?xrfkey=ABCDEFG123456789"
 | |
|         $response = Invoke-QlikRestMethod -Uri $infoUri -Method GET -ContentType "application/json"
 | |
|         
 | |
|         LogConsole ($response)
 | |
|         
 | |
| }
 | |
| 
 | |
| 
 | |
| function SubmitQlikTaskAndGetSessionID
 | |
| {
 | |
| [cmdletbinding()]
 | |
| param( [string] $TaskID )
 | |
| 
 | |
|        LogConsole ("Submit Task : $($TaskID) and retrieve SessionID")
 | |
|        $sessionID = ""
 | |
|      
 | |
|        try
 | |
|        {
 | |
|         
 | |
|            $infoUri = "/task/" + $TaskID + "/start/synchronous/?xrfkey=ABCDEFG123456789"
 | |
|            #LogConsole ($infoUri)
 | |
|            $response = Invoke-QlikRestMethod -Uri $infoUri -Method POST -ContentType "application/json"-Headers $Global:QlikRESTApiAuthHeader 
 | |
|            
 | |
|            #$response = Invoke-QlikRestMethod -Uri $infoUri -Method GET -ContentType "application/json"
 | |
| 
 | |
|            $sessionID = $response.value
 | |
|            
 | |
|            
 | |
|        }
 | |
|        catch {
 | |
|             LogConsole ( "Problem on Tasks' submission")
 | |
|             Exit 100;
 | |
|        }
 | |
|        return  $sessionID
 | |
| }
 | |
| 
 | |
| function CheckTaskSessionStatus 
 | |
| {
 | |
| [cmdletbinding()]
 | |
| param( [string] $SessionID )
 | |
| 
 | |
|        LogConsole ("Check Status for Session: $($SessionID)")
 | |
|        $bCompleted = $false;
 | |
|        $bExitCode = 1;
 | |
| 
 | |
|         do {
 | |
|             try
 | |
|             {
 | |
|                 $infoUri = "/executionresult?filter=ExecutionId eq $($SessionID) &xrfkey=ABCDEFG123456789"
 | |
|                 $response = Invoke-QlikRestMethod -Uri $infoUri -Method GET -ContentType "application/json"-Headers $Global:QlikRESTApiAuthHeader -ErrorVariable $RestException; 
 | |
|                 
 | |
|                 
 | |
|                 switch ( $response.status )
 | |
|                 {
 | |
|                     0 { $result = 'NeverStarted'    }
 | |
|                     1 { $result = 'Triggered'    }
 | |
|                     2 { $result = 'Started'   }
 | |
|                     3 { $result = 'Queued' }
 | |
|                     4 { $result = 'AbortInitiated'  }
 | |
|                     5 { $result = 'Aborting'  }
 | |
|                     6 { $result = 'Aborted' 
 | |
|                             $bCompleted = $true }
 | |
|                     7 { 
 | |
|                             $result = 'FinishedSuccess'  
 | |
|                             $bCompleted = $true 
 | |
|                             $bExitCode = 0;
 | |
|                     }
 | |
|                     8 {     
 | |
|                             $result = 'FinishedFail' 
 | |
|                             $bCompleted = $true
 | |
|                     }
 | |
|                     9 { $result = 'Skipped'  }
 | |
|                     10 { $result = 'Retry'  }
 | |
|                     11 { $result = 'Error' 
 | |
|                             $bCompleted = $true }
 | |
|                     12 { $result = 'Reset' 
 | |
|                             $bCompleted = $true }
 | |
|                    
 | |
|                 }
 | |
|                 LogConsole ("SessionID: $($SessionID) -> Job Status: $($result)" )
 | |
| 
 | |
|             }
 | |
|             catch {
 | |
|                 LogConsole ( "SessionID: $($SessionID) Problems while checking job stasut, exiting 100")
 | |
|                  Exit 100;
 | |
|             }    
 | |
|             if ($bCompleted -eq $false) {
 | |
|                 Start-Sleep -s $PollingInterval    
 | |
|             }  
 | |
|             
 | |
|         } while ($bCompleted -eq $false)
 | |
|     return $bExitCode;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| #------------------------------------------------------------[Script]--------------------------------------------------------------
 | |
| 
 | |
| # Check for connectivity
 | |
| #GetQlikAboutInfo
 | |
| 
 | |
| # Task Submission
 | |
| Ignore-SelfSignedCerts
 | |
| $sSessID= ""
 | |
| $sSessID = SubmitQlikTaskAndGetSessionID  -TaskID $TaskId
 | |
| if ($sSessID.Length -gt 0 ){
 | |
|     $exitCode = CheckTaskSessionStatus -SessionID $sSessID
 | |
|     LogConsole ( "Exiting from Task Submission e Check Running :$($exitCode)")
 | |
| 
 | |
| }
 |