Deploy-QlikVirtualProxy.ps1

function Deploy-QlikVirtualProxy {
    <#
    .SYNOPSIS
    This function ...
 
    .DESCRIPTION
    A bit more description
 
    .PARAMETER FromPipeline
    Shows how to process input from the pipeline, remaining parameters or by named parameter.
 
    .EXAMPLE
    Deploy-QlikVirtualProxy 'abc'
 
    Description of the example.
 
    #>


    <# Enable -Confirm and -WhatIf. #>
    [CmdletBinding(SupportsShouldProcess = $true)]
    param(
        [parameter(Mandatory=$true)]
    [string] $MachineName,
    [parameter(Mandatory=$false)]
    [string] $ArtifactPath  = 'C:\Migrate\virtualproxies', 
    [parameter(Mandatory=$false)]
    [System.Management.Automation.PSCredential] $mycreds 
    )

    begin {
    }

    process {

#$secpasswd = ConvertTo-SecureString “P@ssword123” -AsPlainText -Force
#$mycreds = New-Object System.Management.Automation.PSCredential (“.\qlikuser”, $secpasswd)

        
        $session = New-PSSession -ComputerName $MachineName -Credential $mycreds

        Invoke-Command -Session $session -ScriptBlock{        
                param($Artifact)
                gci 'C:\Program Files\WindowsPowerShell\Modules'  -Recurse | Unblock-File
#Trust All Certs
add-type @'
    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
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::TLS12
Connect-Qlik
$virtualProxies = gci $Artifact
                ForEach($vpText in $virtualProxies){
                $vp = Get-Content $vpText.FullName | ConvertFrom-Json 

                Get-QlikVirtualProxy | ?{$_.prefix -eq  $vp.prefix } | Remove-QlikVirtualProxy 


Get-QlikVirtualProxy | ?{$_.prefix -eq  $vp.prefix } | Remove-QlikVirtualProxy 


$nvp = (@{
    prefix= $vp.prefix ;
    description= $vp.description;
    authenticationModuleRedirectUri= $vp.authenticationModuleRedirectUri;
    loadBalancingServerNodes= ([Array] ( Get-QlikNode ) );
    sessionCookieHeaderName=  ( $vp.sessionCookieHeaderName <#-replace 'custportal' , $env:COMPUTERNAME #> ) ;
    additionalResponseHeaders = (  $vp.additionalResponseHeaders);
    websocketCrossOriginWhiteList = ([Array] (($vp.websocketCrossOriginWhiteList) + (($env:COMPUTERNAME.ToLower(), "$(($env:COMPUTERNAME.ToLower())).webex.com") )) );
} | ConvertTo-Json -Compress -Depth 100)



 Invoke-QlikPost "/qrs/virtualproxyconfig"  $nvp -Verbose
$defaultVP = Get-QlikVirtualProxy -raw -full| ?{$_.prefix  -eq $vp.prefix}

$defaultProxy = Get-QlikProxy -full -raw 
$defaultProxy.settings.virtualProxies +=  ( $defaultVP )

Invoke-QlikPut -path "/qrs/proxyservice/$((Get-QlikProxy -raw ).id)" -body  ( $defaultProxy | ConvertTo-Json -Compress -Depth 100) -Verbose

    #$proxy = (Invoke-QlikGet -path "/qrs/proxyservice/$((Get-QlikProxy).id)" )
    #$proxy.settings.virtualProxies += (Get-QlikVirtualProxy| ?{$_.prefix -eq "static"})

                
    
    }}    -Args ($ArtifactPath)
        }

    end {
    }
}

if ($loadingModule) {
    Export-ModuleMember -Function 'Deploy-QlikVirtualProxy'
}