resources/userdirectory.ps1

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

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

function New-QlikUserDirectory {
    [CmdletBinding()]
    param (
        [parameter(Mandatory = $false, Position = 0)]
        [string]$name,

        [parameter(Mandatory = $false, Position = 1)]
        [string]$userDirectoryName,

        [string]$type,

        [string]$configured = $false,
        [string]$syncOnlyLoggedInUsers = $true,
        [string]$syncStatus = 0,
        [string]$configuredError = "",
        [string]$operationalError = "",
        [System.Object[]]$settings = @(),
        [string[]]$customProperties,
        [string[]]$tags
    )

    PROCESS {

        $ud = @{
            name = $name;
            userDirectoryName = $userDirectoryName;
            configured = $configured;
            operational = $false;
            type = $type;
            syncOnlyLoggedInUsers = $syncOnlyLoggedInUsers;
            syncStatus = $syncStatus;
            configuredError = $configuredError;
            operationalError = $operationalError;
            settings = $settings
        }
        if ($PSBoundParameters.ContainsKey("customProperties")) { $ud.customProperties = @(GetCustomProperties $customProperties) }
        if ($PSBoundParameters.ContainsKey("tags")) { $ud.tags = @(GetTags $tags) }
        $json = $ud | ConvertTo-Json -Compress -Depth 10

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

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

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

function Sync-QlikUserDirectory {
    [CmdletBinding()]
    param (
        [System.Guid[]]$guid = @()
    )

    PROCESS {
        $json = ConvertTo-Json -Compress -Depth 10 $guid

        return Invoke-QlikPost "/qrs/userdirectoryconnector/syncuserdirectories" $json
    }
}

function Update-QlikUserDirectory {
    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "password", Justification = "Deprecation warning")]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingUserNameAndPassWordParams", "", Justification = "Deprecation warning")]
    param (
        [parameter(Mandatory = $true, ValueFromPipeline = $True, ValueFromPipelinebyPropertyName = $True, Position = 0)]
        [string]$id,

        [string]$name,
        [string]$path,
        [string]$username,
        [string]$password,
        [PSCredential]$Credential,
        [string]$ldapFilter,
        [int]$timeout,
        [Int]$pageSize,
        [string[]]$customProperties,
        [string[]]$tags
    )

    PROCESS {
        if ( $username -Or $password ) {
            Write-Warning "Use of username/password parameters is deprecated, please use Credential instead."
        }
        if ( $Credential ) {
            $username = $Credential.Username
            $password = $Credential.GetNetworkCredential().Password
        }

        $ud = Get-QlikUserDirectory -Id $id -raw
        if ($name) {
            $ud.name = $name
        }
        if ($path) {
            ($ud.settings | Where-Object name -eq path).value = $path
        }
        if ($username) {
            ($ud.settings | Where-Object name -eq 'User name').value = $username
        }
        if ($password) {
            ($ud.settings | Where-Object name -eq password).value = $password
        }
        if ($ldapFilter) {
            ($ud.settings | Where-Object name -eq 'LDAP Filter').value = $ldapFilter
        }
        if ($timeout) {
            ($ud.settings | Where-Object name -eq 'Synchronization timeout in seconds').value = $timeout
        }
        if ($pageSize) {
            ($ud.settings | Where-Object name -eq 'Page size').value = $pageSize
        }
        if ($PSBoundParameters.ContainsKey("customProperties")) { $ud.customProperties = @(GetCustomProperties $customProperties) }
        if ($PSBoundParameters.ContainsKey("tags")) { $ud.tags = @(GetTags $tags) }

        $json = $ud | ConvertTo-Json -Compress -Depth 10
        return Invoke-QlikPut -Path "/qrs/userdirectory/$id" -Body $json
    }
}