Added onedrive PS script

This commit is contained in:
Manuel Romero
2020-06-09 14:10:05 +02:00
parent 4d5313d187
commit 47bd1e5a4e

186
vm-qs/scripts/onedrive.ps1 Normal file
View File

@@ -0,0 +1,186 @@
Function DownloadFilesFromOneDrive() {
Process{
Install-Module SharePointPnPPowerShellOnline
Add-Type -AssemblyName System.Web
try {
# --- Ask for URL and parse it
$uri = Read-Host -Prompt 'OneDrive shared link'
$decodedURL = [System.Web.HttpUtility]::UrlDecode($uri)
$decoded = [uri] $decodedURL
$url = "$($decoded.Scheme)://$($decoded.Host)$($decoded.AbsolutePath)"
# ---- Get 'id' param from URL
$ParsedQueryString = [System.Web.HttpUtility]::ParseQueryString($decoded.Query)
$i = 0
$folderSiteRelativeUrl = ""
foreach($QueryStringObject in $ParsedQueryString){
if ( $QueryStringObject -eq "id" ) {
$folderSiteRelativeUrl = $ParsedQueryString[$i]
break
}
$i++
}
$ParamId = $folderSiteRelativeUrl
$decoded.Segments | ForEach-Object {
Write-Host $_
[regex]$pattern = $_
$ParamId = $pattern.replace($ParamId, "", 1)
}
Write-Host "FolderSiteRelativeUrl: $ParamId"
# ----
# --- Get OneDrive credentials and Connect
$credentials = Get-Credential -Message "OneDrive login:" -UserName "<trigram>@qlik.com"
Connect-PnPOnline -Url $url -Credentials $credentials
# ---
# Create folders and download files from OneDrive
New-Item -Path "C:\Temp" -Name "qs-import" -ItemType "directory" -Force | Out-Null
$files = Get-PnPFolderItem -FolderSiteRelativeUrl $ParamId -ItemType File -Recursive | select ServerRelativeUrl,Name,TypedObject
$files | ForEach-Object {
# Create folder
$replacedPath = $($_.ServerRelativeUrl).Replace($folderSiteRelativeUrl,"")
$folderName = Split-Path -Path $replacedPath
New-Item -Path "C:\Temp\qs-import" -Name $folderName -ItemType "directory" -Force | Out-Null
# Download file into folder
Write-Host "Downloading file '$($_.ServerRelativeUrl)' into C:\Temp\qs-import$folderName"
Get-PnPFile -Url $($_.ServerRelativeUrl) -Path "C:\Temp\qs-import$folderName" -AsFile -Force
}
} catch {
Write-Host $_.Exception.Message -ForegroundColor Red
}
}
}
Function restartQse {
Write-Log "Checking Engine Service has started..."
$qse = get-service QlikSenseEngineService
write-log -Message "The engine is currently $($qse.Status)"
if ($qse.Status -eq "Stopped") {
Write-Log -Message "Starting Qlik Sense Engine and waiting 120 seconds" -Severity "Warn";
Start-Service QlikSenseEngineService;
Restart-Service QlikSenseServiceDispatcher;
start-sleep -s 120
}
write-log -Message "The engine is currently $($qse.Status)"
}
Function connQSR {
$i = 1
$statusCode = 0
while ($statusCode -ne 200 -and $i -le 10) {
try {
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
} catch {
$i++
write-log -Message "QSR on $env:COMPUTERNAME not responding attempt $i of 10..." -Severity "Warn"
start-sleep -s 20
}
}
}
# START HERE
DownloadFilesFromOneDrive
### wait for Qlik Sense Proxy service to respond with an HTTP 200 status before proceeding
connQSR
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200){
Write-Log -Message "Waiting 25 seconds before next pass" -Severity "Warn"
restartServices
Write-Log -Message "Waiting 45 seconds for Services to ensure they are ready" -Severity "Warn"
start-sleep -s 45
connQSR
}
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200) {
Write-Log -Message "Provisioning failed" -Severity "Error"
Exit
}
Write-Log -Message "Qlik Sense Proxy responding on $env:COMPUTERNAME, status code: $statusCode"
Write-Log -Message "Connecting to Qlik Sense Repository Service on $env:COMPUTERNAME"
restartQse
### Connect to the Qlik Sense Repository Service with Qlik-Cli
do {
write-log -Message "Connecting to Qlik Sense Repository"; start-sleep 15
}
While( (Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials -ErrorAction SilentlyContinue).length -eq 0 )
### Import scenario extensions
Write-Log -Message "Importing extensions from C:\Temp\qs-import\Extensions"
if ( Test-Path "C:\Temp\qs-import\Extensions" ) {
gci C:\\Temp\\qs-import\\Extensions\\*.zip | foreach {
try {
Write-Log -Message "Importing $_";
Import-QlikExtension -ExtensionPath $_.FullName | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
}
### Import scenario applications
Write-Log -Message "Connecting as user Qlik to QRS"
try {
$cert = "CN=$env:COMPUTERNAME-ca"
gci cert:\CurrentUser\My | where {$_.issuer -eq $cert} | Connect-Qlik -username "$env:COMPUTERNAME\qlik" | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
Write-Log -Message "Importing applications from C:\Temp\qs-import\Apps"
If (Test-Path "C:\Temp\qs-import\Apps\") {
gci C:\\Temp\\qs-import\\Apps\\*.qvf | foreach {
try {
Write-Log -Message "Importing $_";
Import-QlikApp -name $_.BaseName -file $_.FullName -upload | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
}
restartQse
$apps = gci C:\Temp\qs-import\Apps\ -Directory
foreach ($subDirectory in $apps) {
# $encodeDirectory = [System.Web.HttpUtility]::UrlEncode($subDirectory);
$streams = $(Get-QlikStream -filter "name eq '$($subDirectory)'").name
if ( $streams -ne $subDirectory ) {
Write-Log -Message "Creating $subDirectory stream"
New-QlikStream $subDirectory | Out-Null;
$streamId = $(Get-QlikStream -filter "name eq '$($subDirectory)'").id
$systemRuleJson = (@{
name = "Grant everyone access to $subDirectory";
category = "Security";
rule = '((user.name like "*"))';
type = "Custom";
resourceFilter = "Stream_$streamId";
actions = 34;
ruleContext = "QlikSenseOnly";
disabled = $false;
comment = "Stream access";} | ConvertTo-Json -Compress -Depth 10)
Write-Log -Message "Creating $subDirectory System Rule"
Invoke-QlikPost "/qrs/systemrule" $systemRuleJson | Out-Null
}
$files = gci C:\Temp\qs-import\Apps\$subDirectory\*.qvf -File
foreach ($file in $files) {
$streamId = $(Get-QlikStream -filter "name eq '$($subDirectory)'").id
# $encode = [System.Web.HttpUtility]::UrlEncode($file.BaseName)
Write-Log -Message "Importing $($file)";
Import-QlikApp -name $file.BaseName -file $file.FullName -upload | Out-Null;
Write-Log -Message "Publishing $($file.BaseName) to $($subDirectory)";
publish-qlikapp -id $(get-qlikapp -filter "name eq '$($file.BaseName)'").id -stream $streamId -name $file.BaseName | Out-Null
}
}