resources/dataconnection.ps1

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

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

function New-QlikDataConnection {
    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "password", Justification = "Deprecation warning")]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingUserNameAndPassWordParams", "", Justification = "Deprecation warning")]
    param
    (
        [Parameter(ValueFromPipelineByPropertyName = $true,
            Position = 0)]
        [string]$name,
        [Parameter(ValueFromPipelineByPropertyName = $true,
            Position = 1)]
        [string]$connectionstring,
        [Parameter(ValueFromPipelineByPropertyName = $true,
            Position = 2)]
        [string]$type,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string[]]$customProperties,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string[]]$tags,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]$username,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]$password,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]$architecture,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [string]$logOn,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [PSCredential]$Credential,
        [Parameter(ValueFromPipelineByPropertyName = $true)]
        [object]$owner
    )

    PROCESS {
        if ($username -Or $password) {
            Write-Warning "Use of username/password parameters is deprecated, please use Credential instead."
        }
        if ($Credential) {
            $username = $Credential.GetNetworkCredential().Username
            $password = $Credential.GetNetworkCredential().Password
        }
        if ($password.Trim().Length -gt 0) {
            if ($password.IndexOf("%2") -eq 10) {
                $password = $password.Substring(12, $password.Length - 14)
            }
        }
        else {
            $Pass = ""
        }
        if ($username.Trim().Length -eq 0) {
            $username = ""
        }

        switch ($architecture) {
            ( { ($_ -eq "0") -or ($_ -eq "Undefined") } ) { $architecture = 0 }
            ( { ($_ -eq "1") -or ($_ -eq "x86") } ) { $architecture = 1 }
            ( { ($_ -eq "2") -or ($_ -eq "x64") } ) { $architecture = 2 }
            default { $architecture = 0 }
        }

        switch ($logOn) {
            ( { ($_ -eq "0") -or ($_ -eq "LOG_ON_SERVICE_USER") } ) { $logOn = 0 }
            ( { ($_ -eq "1") -or ($_ -eq "LOG_ON_CURRENT_USER") } ) { $logOn = 1 }
            default { $logOn = 0 }
        }

        $qdc = @{
            name = $name;
            connectionstring = $connectionstring;
            type = $type
            LogOn = $logOn
            Architecture = $architecture
            customProperties = @();
            tags = @();
            engineObjectId = [Guid]::NewGuid();
            username = $username;
            password = $password;
        }

        if ($PSBoundParameters.ContainsKey("customProperties")) { $qdc.customProperties = @(GetCustomProperties $customProperties) }
        if ($PSBoundParameters.ContainsKey("tags")) { $qdc.tags = @(GetTags $tags) }
        if ($PSBoundParameters.ContainsKey("owner")) { $qdc.owner = GetUser $owner }

        $json = $qdc | ConvertTo-Json -Compress -Depth 10

        return Invoke-QlikPost "/qrs/dataconnection" $json
    }
}

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

    PROCESS {
        return Invoke-QlikDelete "/qrs/dataconnection/$id"
    }
}

function Update-QlikDataConnection {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $true, ValueFromPipeline = $True, ValueFromPipelinebyPropertyName = $True, Position = 0)]
        [string]$id,
        [string]$ConnectionString,
        [PSCredential]$Credential,
        [object]$owner,
        [string[]]$customProperties,
        [string[]]$tags
    )

    PROCESS {
        $qdc = Get-QlikDataConnection -raw $id
        If ($PSBoundParameters.ContainsKey("ConnectionString")) {
            $qdc.connectionstring = $ConnectionString
        }
        if ( $Credential ) {
            $qdc.username = $Credential.GetNetworkCredential().Username
            if ($qdc.psobject.Properties.name -contains "password") {
                $qdc.password = $Credential.GetNetworkCredential().Password
            }
            else {
                $qdc | Add-Member -MemberType NoteProperty -Name "password" -Value $($Credential.GetNetworkCredential().Password)
            }
        }
        if ($PSBoundParameters.ContainsKey("customProperties")) { $qdc.customProperties = @(GetCustomProperties $customProperties) }
        if ($PSBoundParameters.ContainsKey("tags")) { $qdc.tags = @(GetTags $tags) }
        if ($PSBoundParameters.ContainsKey("owner")) { $qdc.owner = GetUser $owner }

        $json = $qdc | ConvertTo-Json -Compress -Depth 10
        return Invoke-QlikPut "/qrs/dataconnection/$id" $json
    }
}