application-workloads/qlik/qlik-sense-enterprise/scripts/qs-install.ps1 (153 lines of code) (raw):

<# Qlik Sense Installation #> # variables $adminUser = $Args[0] $adminPass = $Args[1] $serviceAccountUser = $Args[2] $serviceAccountPass = $Args[3] $dbPass = $Args[4] $qlikSenseVersion = $($Args[5]) $qlikSenseSerial = $($Args[6]) $qlikSenseControl = $($Args[7]) $qlikSenseOrganization = $($Args[8]) $qlikSenseName = $($Args[9]) $serviceAccountWithDomain = -join ($($env:ComputerName), '\',$($Args[2])) # qlik sense download urls $json = @{ qliksense = @( @{ name= "Qlik Sense November 2017" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.24/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense September 2017 Patch 1" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.14/1/_MSI/Qlik_Sense_update.exe" url2= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.14/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense September 2017" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.14/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense June 2017 Patch 3" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/3/_MSI/Qlik_Sense_update.exe" url2= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense June 2017 Patch 2" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/2/_MSI/Qlik_Sense_update.exe" url2= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense June 2017 Patch 1" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/1/_MSI/Qlik_Sense_update.exe" url2= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense June 2017" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/11.11/0/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense 3.2 SR5" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/3.2.5/205/_MSI/Qlik_Sense_setup.exe" }, @{ name= "Qlik Sense 3.2 SR4" url= "https://da3hntz84uekx.cloudfront.net/QlikSense/3.2.4/204/_MSI/Qlik_Sense_setup.exe" } ) } $json | ConvertTo-Json -Compress -Depth 10 | Out-File 'c:\installation\qBinaryDownload.json' # create qlik sense service account net user "$($serviceAccountUser)" "$($serviceAccountPass)" /add /fullname:"Qlik Sense Service Account" /passwordchg:NO ([ADSI]"WinNT://$($env:computername)/administrators,group").psbase.Invoke("Add",([ADSI]"WinNT://$($env:computername)/$($serviceAccountUser)").path) # create folder for shared persistence and share folder New-Item -ItemType directory -Path C:\Qlik New-SmbShare -Name Qlik -Path C:\Qlik -FullAccess everyone #download installation files Get-PackageProvider -Name NuGet -ForceBootstrap Install-Module -Name Qlik-CLI -Confirm:$false -Force # download selected Qlik Sense binary and any updates $json = (@{ name = $qlikSenseVersion;}) $json | ConvertTo-Json -Compress -Depth 10 | Out-File 'c:\installation\qsVer.json' $qsVer = (Get-Content C:\installation\qsVer.json -raw) | ConvertFrom-Json $qsBinaryURL = (Get-Content C:\installation\qBinaryDownload.json -raw) | ConvertFrom-Json $binaryName = $qsBinaryURL.qliksense | where { $_.name -eq $qsVer.name} $selVer = $qsBinaryURL.qliksense | where { $_.name -eq $qsVer.name } $path = 'c:\installation' $url = $selVer.url $fileName = $url.Substring($url.LastIndexOf("/") + 1) $dlLoc = join-path $path $fileName if ($selVer.name -like "*Patch*") { (New-Object System.Net.WebClient).DownloadFile($url, $dlLoc) $url2 = $selVer.url2 $fileName = $url2.Substring($url2.LastIndexOf("/") + 1) $dlLoc = join-path $path $fileName (New-Object System.Net.WebClient).DownloadFile($url2, $dlLoc) } else { (New-Object System.Net.WebClient).DownloadFile($url, $dlLoc) } # Opening Firewall ports 443/4244, 80/4248 New-NetFirewallRule -DisplayName "Qlik Sense" -Direction Inbound -LocalPort 443, 4244, 80, 4248 -Protocol TCP -Action Allow # create Shared Persistence XML @" <?xml version="1.0"?> <SharedPersistenceConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <DbUserName>qliksenserepository</DbUserName> <DbUserPassword>$($dbPass)</DbUserPassword> <DbHost>$env:COMPUTERNAME</DbHost> <DbPort>4432</DbPort> <RootDir>\\$env:COMPUTERNAME\Qlik</RootDir> <StaticContentRootDir>\\$env:COMPUTERNAME\Qlik\StaticContent</StaticContentRootDir> <CustomDataRootDir>\\$env:COMPUTERNAME\Qlik\CustomData</CustomDataRootDir> <ArchivedLogsDir>\\$env:COMPUTERNAME\Qlik\ArchivedLogs</ArchivedLogsDir> <AppsDir>\\$env:COMPUTERNAME\Qlik\Apps</AppsDir> <CreateCluster>true</CreateCluster> <InstallLocalDb>true</InstallLocalDb> <ConfigureDbListener>true</ConfigureDbListener> <ListenAddresses>*</ListenAddresses> <IpRange>0.0.0.0/0</IpRange> <!--<JoinCluster>true</JoinCluster>--> </SharedPersistenceConfiguration> "@ | Out-File C:\installation\spConfig.xml # install Qlik Sense If (Test-Path "C:\installation\Qlik_Sense_setup.exe") { Unblock-File -Path C:\installation\Qlik_Sense_setup.exe Invoke-Command -ScriptBlock {Start-Process -FilePath "c:\installation\Qlik_Sense_setup.exe" -ArgumentList "-s -log c:\installation\logqlik.txt dbpassword=$($dbPass) hostname=$($env:COMPUTERNAME) userwithdomain=$serviceAccountWithDomain password=$($serviceAccountPass) spc=c:\installation\spConfig.xml" -Wait -PassThru} } # wait for Qlik Sense to respond before continuing $statusCode = 0 while ($StatusCode -ne 200) { try { $statusCode = (invoke-webrequest https://$($env:COMPUTERNAME)/qps/user -usebasicParsing).statusCode } Catch { "Server down, waiting 20 seconds" | Add-Content c:\installation\statusLog.txt start-Sleep -s 20 } } #install Qlik Sense Update If (Test-Path "c:\installation\Qlik_Sense_update.exe") { Unblock-File -Path c:\installation\Qlik_Sense_update.exe Invoke-Command -ScriptBlock {Start-Process -FilePath "c:\installation\Qlik_Sense_Update.exe" -ArgumentList "install" -Wait -Passthru } Get-Service Qlik* | where {$_.Name -ne 'QlikLoggingService'} | Start-Service Get-Service Qlik* | where {$_.Name -eq 'QlikSenseServiceDispatcher'} | Stop-Service Get-Service Qlik* | where {$_.Name -eq 'QlikSenseServiceDispatcher'} | Start-Service } If (! ( $qlikSenseSerial -eq "defaultValue" ) -or $qlikSenseSerial -eq "") { $statusCode = 0 while ($StatusCode -ne 200) { try { $statusCode = (invoke-webrequest https://$($env:COMPUTERNAME)/qps/user -usebasicParsing).statusCode } Catch { start-Sleep -s 20 } } $connectResult = Connect-Qlik $env:COMPUTERNAME -UseDefaultCredentials $licenseResult = Set-QlikLicense -serial $qlikSenseSerial -control $qlikSenseControl -name "$($qlikSenseName)" -organization "$($qlikSenseOrganization)" }