DSC/Configuration/xRemoteDesktopSessionHost/DSCResources/MSFT_xRDSessionCollection/MSFT_xRDSessionCollection.psm1 (131 lines of code) (raw):
if ([System.Environment]::OSVersion.Version -lt "6.2.9200.0") { Throw "The minimum OS requirement was not met."}
Import-Module RemoteDesktop
$localhost = [System.Net.Dns]::GetHostByName((hostname)).HostName
#######################################################################
# The Get-TargetResource cmdlet.
#######################################################################
function Get-TargetResource
{
[CmdletBinding()]
[OutputType([System.Collections.Hashtable])]
param
(
[string] $ConnectionBroker,
[parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $CollectionName,
[string] $CollectionDescription,
[string[]] $SessionHosts
)
$result = $null
if ($ConnectionBroker)
{
write-verbose "Getting information about RD Session collection '$CollectionName' at RD Connection Broker '$ConnectionBroker'..."
$collection = Get-RDSessionCollection -CollectionName $CollectionName -ConnectionBroker $ConnectionBroker -ea SilentlyContinue
}
else
{
write-verbose "Getting information about RD Session collection '$CollectionName'..."
$collection = Get-RDSessionCollection -CollectionName $CollectionName -ea SilentlyContinue
$ConnectionBroker = $localhost
}
if ($collection)
{
write-verbose "found the collection, now getting list of RD Session Host servers..."
$SessionHosts = Get-RDSessionHost -CollectionName $CollectionName | % SessionHost
write-verbose "found $($SessionHosts.Count) host servers assigned to the collection."
$result =
@{
"ConnectionBroker" = $ConnectionBroker
"CollectionName" = $collection.CollectionName
"CollectionDescription" = $collection.CollectionDescription
"SessionHosts" = $SessionHosts
}
write-verbose ">> Collection name: $($result.CollectionName)"
write-verbose ">> Collection description: $($result.CollectionDescription)"
write-verbose ">> RD Connection Broker: $($result.ConnectionBroker.ToLower())"
write-verbose ">> RD Session Host servers: $($result.SessionHosts.ToLower() -join '; ')"
}
else
{
write-verbose "RD Session collection '$CollectionName' not found."
}
$result
}
########################################################################
# The Set-TargetResource cmdlet.
########################################################################
function Set-TargetResource
{
[CmdletBinding()]
param
(
[string] $ConnectionBroker,
[parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $CollectionName,
[string] $CollectionDescription,
[string[]] $SessionHosts
)
if ($ConnectionBroker)
{
write-verbose "Creating a new RD Session collection '$CollectionName' at the RD Connection Broker '$ConnectionBroker'..."
}
else
{
$PSBoundParameters.Remove("ConnectionBroker")
write-verbose "Creating a new RD Session collection '$CollectionName'..."
}
if ($CollectionDescription)
{
write-verbose "Description: '$CollectionDescription'"
}
else
{
$PSBoundParameters.Remove("CollectionDescription")
}
if ($SessionHosts)
{
write-verbose ">> RD Session Host servers: $($SessionHosts.ToLower() -join '; ')"
}
else
{
$SessionHosts = @( $localhost )
}
$PSBoundParameters.Remove("SessionHosts")
write-verbose "calling New-RdSessionCollection cmdlet..."
New-RDSessionCollection @PSBoundParameters -SessionHost $SessionHosts
# Add-RDSessionHost @PSBoundParameters # that's if the Session host is not in the collection
}
#######################################################################
# The Test-TargetResource cmdlet.
#######################################################################
function Test-TargetResource
{
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
[string] $ConnectionBroker,
[parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $CollectionName,
[string] $CollectionDescription,
[string[]] $SessionHosts
)
write-verbose "Checking for existence of RD Session collection named '$CollectionName'..."
$collection = Get-TargetResource @PSBoundParameters
if ($collection)
{
write-verbose "verifying RD Session collection name and parameters..."
$result = ($collection.CollectionName -ieq $CollectionName)
}
else
{
write-verbose "RD Session collection named '$CollectionName' not found."
$result = $false
}
write-verbose "Test-TargetResource returning: $result"
return $result
}
Export-ModuleMember -Function *-TargetResource