DSCResources/MSFT_xRDLicenseConfiguration/MSFT_xRDLicenseConfiguration.psm1
|
$modulePath = Join-Path -Path (Split-Path -Path (Split-Path -Path $PSScriptRoot -Parent) -Parent) -ChildPath 'Modules' # Import the Common Modules Import-Module -Name (Join-Path -Path $modulePath -ChildPath 'xRemoteDesktopSessionHost.Common') Import-Module -Name (Join-Path -Path $modulePath -ChildPath 'DscResource.Common') if (-not (Test-xRemoteDesktopSessionHostOsRequirement)) { throw 'The minimum OS requirement was not met.' } ####################################################################### # The Get-TargetResource cmdlet. ####################################################################### function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $ConnectionBroker, [Parameter()] [System.String[]] $LicenseServer, [Parameter(Mandatory = $true)] [ValidateSet('PerUser', 'PerDevice', 'NotConfigured')] [System.String] $LicenseMode ) Write-Verbose "Getting RD License server configuration from broker '$ConnectionBroker'..." Assert-Module -ModuleName 'RemoteDesktop' -ImportModule $config = Get-RDLicenseConfiguration -ConnectionBroker $ConnectionBroker -ea SilentlyContinue if ($config) # Microsoft.RemoteDesktopServices.Management.LicensingSetting { Write-Verbose 'configuration retrieved successfully:' $result = @{ ConnectionBroker = $ConnectionBroker LicenseServer = [System.String[]] $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 '; ')" } else { $result = $null } return $result } ######################################################################## # The Set-TargetResource cmdlet. ######################################################################## function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $ConnectionBroker, [Parameter()] [System.String[]] $LicenseServer, [Parameter(Mandatory = $true)] # required parameter in Set-RDLicenseConfiguration [ValidateSet('PerUser', 'PerDevice', 'NotConfigured')] [System.String] $LicenseMode ) Write-Verbose 'Starting RD License server configuration...' Assert-Module -ModuleName 'RemoteDesktop' -ImportModule Write-Verbose ">> RD Connection Broker: $($ConnectionBroker.ToLower())" $setLicenseConfigParams = @{ ConnectionBroker = $ConnectionBroker Mode = $LicenseMode } if ($LicenseServer) { Write-Verbose ">> RD License servers: $($LicenseServer -join '; ')" $setLicenseConfigParams.LicenseServer = $LicenseServer } Write-Verbose 'Calling Set-RDLicenseConfiguration cmdlet...' Set-RDLicenseConfiguration @setLicenseConfigParams -Force } ####################################################################### # The Test-TargetResource cmdlet. ####################################################################### function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [System.String] $ConnectionBroker, [Parameter()] [System.String[]] $LicenseServer, [Parameter(Mandatory = $true)] [ValidateSet('PerUser', 'PerDevice', 'NotConfigured')] [System.String] $LicenseMode ) Write-Verbose 'Testing RD license servers' $testDscParameterStateSplat = @{ CurrentValues = Get-TargetResource @PSBoundParameters DesiredValues = $PSBoundParameters TurnOffTypeChecking = $false SortArrayValues = $true Verbose = $VerbosePreference } return Test-DscParameterState @testDscParameterStateSplat } Export-ModuleMember -Function *-TargetResource |