DSCResources/MSFT_xRDLicenseConfiguration/MSFT_xRDLicenseConfiguration.psm1
Import-Module -Name "$PSScriptRoot\..\..\xRemoteDesktopSessionHostCommon.psm1" if (!(Test-xRemoteDesktopSessionHostOsRequirement)) { Throw "The minimum OS requirement was not met."} Import-Module RemoteDesktop ####################################################################### # The Get-TargetResource cmdlet. ####################################################################### function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $ConnectionBroker, [Parameter()] [string[]] $LicenseServer, [Parameter(Mandatory = $true)] [ValidateSet("PerUser", "PerDevice", "NotConfigured")] [string] $LicenseMode ) $result = $null Write-Verbose "Getting RD License server configuration from broker '$ConnectionBroker'..." $config = Get-RDLicenseConfiguration -ConnectionBroker $ConnectionBroker -ea SilentlyContinue if ($config) # Microsoft.RemoteDesktopServices.Management.LicensingSetting { Write-Verbose "configuration retrieved successfully:" } else { Write-Verbose "Failed to retrieve RD License configuration from broker '$ConnectionBroker'." throw ("Failed to retrieve RD License configuration from broker '$ConnectionBroker'.") } $result = @{ "ConnectionBroker" = $ConnectionBroker "LicenseServer" = $config.LicenseServer "LicenseMode" = $config.Mode.ToString() # Microsoft.RemoteDesktopServices.Management.LicensingMode .ToString() } Write-Verbose ">> RD License mode: $($result.LicenseMode)" Write-Verbose ">> RD License servers: $($result.LicenseServer -join '; ')" $result } ######################################################################## # The Set-TargetResource cmdlet. ######################################################################## function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $ConnectionBroker, [Parameter()] [string[]] $LicenseServer, [Parameter(Mandatory = $true)] # required parameter in Set-RDLicenseConfiguration [ValidateSet("PerUser", "PerDevice", "NotConfigured")] [string] $LicenseMode ) Write-Verbose "Starting RD License server configuration..." Write-Verbose ">> RD Connection Broker: $($ConnectionBroker.ToLower())" if ($LicenseServer) { Write-Verbose ">> RD License servers: $($LicenseServer -join '; ')" Write-Verbose "calling Set-RDLicenseConfiguration cmdlet..." Set-RDLicenseConfiguration -ConnectionBroker $ConnectionBroker -LicenseServer $LicenseServer -Mode $LicenseMode -Force } else { Write-Verbose "calling Set-RDLicenseConfiguration cmdlet..." Set-RDLicenseConfiguration -ConnectionBroker $ConnectionBroker -Mode $LicenseMode -Force } Write-Verbose "Set-RDLicenseConfiguration done." } ####################################################################### # The Test-TargetResource cmdlet. ####################################################################### function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $ConnectionBroker, [Parameter()] [string[]] $LicenseServer, [Parameter(Mandatory = $true)] [ValidateSet("PerUser", "PerDevice", "NotConfigured")] [string] $LicenseMode ) $config = Get-TargetResource @PSBoundParameters if ($config) { Write-Verbose "Verifying RD Licensing mode: $($config.LicenseMode -eq $LicenseMode)" Write-Verbose "Verifying RD license servers..." $noChange = $true if ($LicenseServer) { ForEach ($server in $config.LicenseServer) { if ($LicenseServer -notcontains $server) { $noChange = $false Write-Verbose "License Server '$server' in the current configuration will be removed." } } if ($LicenseServer.Count -ne $config.LicenseServer.Count) { $noChange = $false } } $result = ($config.LicenseMode -eq $LicenseMode) -and $noChange } else { Write-Verbose "Failed to retrieve RD License server configuration from broker '$ConnectionBroker'." $result = $false } Write-Verbose "Test-TargetResource returning: $result" return $result } Export-ModuleMember -Function *-TargetResource |