Skip to content

Instantly share code, notes, and snippets.

@Nillth
Created November 10, 2022 10:32
Show Gist options
  • Save Nillth/02b0bf61fe1da53fc2be3db0c2d0359b to your computer and use it in GitHub Desktop.
Save Nillth/02b0bf61fe1da53fc2be3db0c2d0359b to your computer and use it in GitHub Desktop.
Downloads the Latest Version & N-1 of Qlik Sense CM
$DownloadLocation = "\\nas\SharedData\Installers\QSEoW\"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]'Tls,Tls11,Tls12'
$Releases = Invoke-RestMethod "https://api.github.com/repos/qlik-download/qlik-sense-server/releases?per_page=100"
# Page2 Required to account for Nov21IR being behind the back catalog
$Releases += Invoke-RestMethod "https://api.github.com/repos/qlik-download/qlik-sense-server/releases?per_page=100&page=2"
$grouped = $Releases | Select-Object -Property *, @{
N = "version"; e = {
[version]::Parse(($_.tag_name.TrimStart("v")))
}
}, @{
N = "Family"; E = {
$V = [version]::Parse(($_.tag_name.TrimStart("v"))); "$($v.major).$('{0:d3}' -f $V.minor)"
}
} | Sort-Object -property version | Group-Object -Property Family
$LatestRelease = $grouped[-1].Group
$LatestReleaseN1 = $grouped[-2].Group
$LR = @{
Name = ($LatestRelease | Where-Object{
$_.name -like "*IR" -or $_.name -like "*Initial Release"
}).name.trimend("Initial Release").trimend("IR")
IR = ($LatestRelease.assets | Where-Object{
$_.name -eq "Qlik_Sense_setup.exe"
}).browser_download_url
Update = ($LatestRelease | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).assets.browser_download_url
UpdateName = ($LatestRelease | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).name
Patch = '{0:d2}' -f [int](($LatestRelease | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).name -split "Patch")[-1].Trim()
}
$LRN1 = @{
Name = ($LatestReleaseN1 | Where-Object{
$_.name -like "*IR" -or $_.name -like "*Initial Release"
}).name.trimend("Initial Release").trimend("IR")
IR = ($LatestReleaseN1.assets | Where-Object{
$_.name -eq "Qlik_Sense_setup.exe"
}).browser_download_url
Update = ($LatestReleaseN1 | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).assets.browser_download_url
UpdateName = ($LatestReleaseN1 | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).name
Patch = '{0:d2}' -f [int](($LatestReleaseN1 | Where-Object{
$_.assets.name -eq "Qlik_Sense_update.exe"
} | Sort-Object -property version -Descending | Select-Object -first 1).name -split "Patch")[-1].Trim()
}
Function Download-QSRelease ($Obj, $Path)
{
$SubFolder = [datetime]::Parse($Obj.Name).tostring("yyyy-MM")
[System.IO.DirectoryInfo]$DLocation = "$($Path)\$($SubFolder)"
$DLocation.Create()
[System.IO.FileInfo]$FileIR = "$($DLocation)\$($($LR.IR -split '/')[-1])"
if (-not $FileIR.Exists)
{
Invoke-RestMethod -Uri $Obj.IR -OutFile $FileIR.FullName
}
if (-not [string]::IsNullOrEmpty($Obj.Update))
{
[System.IO.FileInfo]$FilePatch = "$($DLocation)\$("{0}_$($Obj.Patch).{1}" -f (($Obj.Update -split '/')[-1]).split("."))"
Invoke-RestMethod -Uri $Obj.Update -OutFile $FilePatch.FullName
}
}
Download-QSRelease -Obj $LRN1 -Path $DownloadLocation
Download-QSRelease -Obj $LR -Path $DownloadLocation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment