resources/license.ps1

function Get-QlikAccessTypeInfo {
    PROCESS {
        return Invoke-QlikGet "/qrs/license/accesstypeinfo"
    }
}

function Get-QlikAnalyzerAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0)]
        [string]$id,
        [string]$filter,
        [switch]$full,
        [switch]$raw
    )

    PROCESS {
        $path = "/qrs/license/analyzerAccessType"
        If ( $id ) { $path += "/$id" }
        If ( $full ) { $path += "/full" }
        If ( $raw ) { $rawOutput = $true }
        return Invoke-QlikGet $path $filter
    }
}
Set-Alias -Name Get-QlikAnalyserAccessType -Value Get-QlikAnalyzerAccessType

function Get-QlikLicense {
    PROCESS {
        return Invoke-QlikGet "/qrs/license"
    }
}

function Get-QlikLicenseAudit {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true)]
        [string]$resourceType,
        [string]$resourceFilter,
        [string]$userFilter,
        [string]$environmentAttributes,
        [int]$userSkip,
        [int]$userTake,
        [int]$resourceSkip,
        [int]$resourceTake,
        [switch]$includeNonGrantingRules,
        [parameter(ValueFromPipelinebyPropertyName = $true)]
        [alias("id")]
        [string]$resourceId,
        [switch]$raw
    )
    PROCESS {
        $params = @{
            resourceType = $resourceType;
            resourceFilter = $resourceFilter;
            userFilter = $userFilter;
            environmentAttributes = $environmentAttributes;
            userSkip = $userSkip;
            userTake = $userTake;
            resourceSkip = $resourceSkip;
            resourceTake = $resourceTake;
        }
        If ( $includeNonGrantingRules ) { $params.includeNonGrantingRules = $true }
        If ( $resourceId ) { $params.resourceFilter = "id eq $resourceId" }
        $json = $params | ConvertTo-Json -Compress -Depth 10
        If ( $raw ) { $rawOutput = $true }
        return Invoke-QlikPost "/qrs/systemrule/license/audit" $json
    }
}

function Get-QlikLoginAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0)]
        [string]$id,
        [string]$filter,
        [switch]$full,
        [switch]$raw
    )

    PROCESS {
        $path = "/qrs/license/loginAccessType"
        If ( $id ) { $path += "/$id" }
        If ( $full ) { $path += "/full" }
        If ( $raw ) { $rawOutput = $true }
        return Invoke-QlikGet $path $filter
    }
}

function Get-QlikProfessionalAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0)]
        [string]$id,
        [string]$filter,
        [switch]$full,
        [switch]$raw
    )

    PROCESS {
        $path = "/qrs/license/professionalaccesstype"
        If ( $id ) { $path += "/$id" }
        If ( $full ) { $path += "/full" }
        If ( $raw ) { $rawOutput = $true }
        return Invoke-QlikGet $path $filter
    }
}

function Get-QlikUserAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0)]
        [string]$id,
        [string]$filter,
        [switch]$full,
        [switch]$raw
    )

    PROCESS {
        $path = "/qrs/license/useraccesstype"
        If ( $id ) { $path += "/$id" }
        If ( $full ) { $path += "/full" }
        If ( $raw ) { $rawOutput = $true }
        return Invoke-QlikGet $path $filter
    }
}

function New-QlikProfessionalAccessGroup {
    [CmdletBinding()]
    param (
        [string]$name
    )

    PROCESS {
        $json = (@{
                name = $name
            } | ConvertTo-Json -Compress -Depth 10)

        return Invoke-QlikPost "/qrs/License/ProfessionalAccessGroup" $json
    }
}

function New-QlikUserAccessGroup {
    [CmdletBinding()]
    param (
        [string]$name
    )

    PROCESS {
        $json = (@{
                name = $name
            } | ConvertTo-Json -Compress -Depth 10)

        return Invoke-QlikPost "/qrs/License/UserAccessGroup" $json
    }
}

function Remove-QlikAnalyzerAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0, ValueFromPipelinebyPropertyName = $true)]
        [string]$id
    )

    PROCESS {
        return Invoke-QlikDelete -path "/qrs/license/analyzeraccesstype/$id"
    }
}
Set-Alias -Name Remove-QlikAnalyserAccessType -Value Remove-QlikAnalyzerAccessType

function Remove-QlikProfessionalAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0, ValueFromPipelinebyPropertyName = $true)]
        [string]$id
    )

    PROCESS {
        return Invoke-QlikDelete -path "/qrs/license/professionalaccesstype/$id"
    }
}

function Remove-QlikUserAccessType {
    [CmdletBinding()]
    param (
        [parameter(Position = 0, ValueFromPipelinebyPropertyName = $true)]
        [string]$id
    )
    PROCESS {
        return Invoke-QlikDelete -path "/qrs/license/useraccesstype/$id"
    }
}

function Set-QlikLicense {
    [CmdletBinding(DefaultParameterSetName = 'Serial')]
    param
    (
        [Parameter(ParameterSetName = 'Serial',
            Mandatory = $true,
            Position = 0)]
        [string]$serial,
        [Parameter(ParameterSetName = 'Serial',
            Mandatory = $true,
            Position = 1)]
        [string]$control,
        [Parameter(ParameterSetName = 'Key',
            Mandatory = $true,
            Position = 0)]
        [string]$key,
        [Parameter(Mandatory = $true,
            Position = 2)]
        [string]$name,
        [Parameter(Mandatory = $true,
            Position = 3)]
        [Alias('org')]
        [string]$organization,
        [Parameter(ParameterSetName = 'Serial',
            Mandatory = $false,
            Position = 4)]
        [string]$lef
    )

    PROCESS {
        Write-Verbose "Type: $($PSCmdlet.ParameterSetName)"
        $BaseURL = "/qrs/license"
        $CurrentQlikLicense = Invoke-QlikGet $BaseURL

        #Create the License Object we will pass to the API
        $QlikLicense = @{
            name = $name;
            organization = $organization;
        }

        if ($CurrentQlikLicense -eq "null") {
            Write-Verbose "QlikLicense = Null"
            $Process = "Post"
        }
        else {
            Write-Verbose "QlikLicense != Null"
            $Process = "Put"
            #Check for Key -> Serial downgrade
            if ($CurrentQlikLicense.key -ne "" -and $PSCmdlet.ParameterSetName -eq "Serial") { $Process = "downgrade" }

            #Update the License object with the Current License ID
            $QlikLicense.id = $CurrentQlikLicense.id
            $QlikLicense.modifiedDate = Get-Date -UFormat '+%Y-%m-%dT%H:%M:%S.000Z'
            $BaseURL = "$($BaseURL)/$($CurrentQlikLicense.id)"
        }

        switch ($PSCmdlet.ParameterSetName) {
            Key {
                $resourceURL = $BaseURL
                $QlikLicense.key = $key;
            }
            Serial {
                $resourceURL = "$($BaseURL)?control=$control"
                $QlikLicense.serial = $serial;
                $QlikLicense.lef = $lef;
            }
        }
        $json = $QlikLicense | ConvertTo-Json -Depth 10

        switch ($Process) {
            Post { $result = Invoke-QlikPost $resourceURL $json }
            Put { $result = Invoke-QlikPut $resourceURL $json }
            Downgrade { Write-Warning -Message "Qlik Sense APIs do NOT have a supported method for downgrading from a Signed License"; }
            Default { }
        }
    }
    END {
        return $result
    }
}