Added onedrive PS script
This commit is contained in:
186
vm-qs/scripts/onedrive.ps1
Normal file
186
vm-qs/scripts/onedrive.ps1
Normal 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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user