DSCResources/CTX_PVSFarmConfig/CTX_PVSFarmConfig.psm1
function Get-TargetResource { [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'DSCMachineStatus')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars', 'global:DSCMachineStatus')] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $FarmName, [Parameter()] [ValidateLength(0,250)] [System.String] $Description, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutoAddEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AuditingEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $DefaultSiteName, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $OfflineDatabaseSupportEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LicenseServer, [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt32] $LicenseServerPort, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $LicenseTradeUp, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutomaticMergeEnabled, [Parameter()] [ValidateRange(3,50)] [System.UInt32] $MaxVersions, [Parameter()] [ValidateRange(0,2)] [System.UInt32] $MergeMode, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $PVSServerName = 'localhost', [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt64] $SoapPort = 54321, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Username, [Parameter()] [ValidateNotNullOrEmpty()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Password ) try { Write-Verbose "Loading Powershell Citrix PVS Snapin..." [ref] $null = LoadPVSConsoleSnapin } catch { throw "Error loading PVS Powershell module..." } try { $pvsfarm = Get-PvsFarm } catch { Throw "Couldn't get PVS Farm configuration..." } $targetResource = @{ FarmName = $pvsfarm.FarmName Description = $pvsfarm.Description AutoAddEnabled = $pvsfarm.AutoAddEnabled AuditingEnabled = $pvsfarm.AuditingEnabled DefaultSiteName = $pvsfarm.DefaultSiteName OfflineDatabaseSupportEnabled = $pvsfarm.OfflineDatabaseSupportEnabled LicenseServer = $pvsfarm.LicenseServer LicenseServerPort = $pvsfarm.LicenseServerPort LicenseTradeUp = $pvsfarm.LicenseTradeUp AutomaticMergeEnabled = $pvsfarm.AutomaticMergeEnabled MaxVersions = $pvsfarm.MaxVersions MergeMode = $pvsfarm.MergeMode } #$targetResource | Out-Host return $targetResource } #end function Get-TargetResource function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $FarmName, [Parameter()] [ValidateLength(0,250)] [System.String] $Description, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutoAddEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AuditingEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $DefaultSiteName, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $OfflineDatabaseSupportEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LicenseServer, [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt32] $LicenseServerPort, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $LicenseTradeUp, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutomaticMergeEnabled, [Parameter()] [ValidateRange(3,50)] [System.UInt32] $MaxVersions, [Parameter()] [ValidateRange(0,2)] [System.UInt32] $MergeMode, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $PVSServerName = 'localhost', [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt64] $SoapPort = 54321, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Username, [Parameter()] [ValidateNotNullOrEmpty()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Password ) $targetResource = Get-TargetResource @PSBoundParameters; $inCompliance = $true; foreach ($property in $PSBoundParameters.Keys) { if ($targetResource.ContainsKey($property)) { $expected = $PSBoundParameters[$property]; $actual = $targetResource[$property]; if ($expected -ne $actual) { Write-Verbose "Not in desired state, $property should be $expected, acutaly is $actual" $inCompliance = $false; } } } if ($inCompliance) { Write-Verbose ("PVSFarmConfig is in desired state."); return $true; } else { Write-Verbose ("PVSReconfigureServer is NOT in desired state."); return $false; } } #end function Test-TargetResource function Set-TargetResource { [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'DSCMachineStatus')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars', 'global:DSCMachineStatus')] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $FarmName, [Parameter()] [ValidateLength(0,250)] [System.String] $Description, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutoAddEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AuditingEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $DefaultSiteName, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $OfflineDatabaseSupportEnabled, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LicenseServer, [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt32] $LicenseServerPort, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $LicenseTradeUp, [Parameter()] [ValidateNotNullOrEmpty()] [System.Boolean] $AutomaticMergeEnabled, [Parameter()] [ValidateRange(3,50)] [System.UInt32] $MaxVersions, [Parameter()] [ValidateRange(0,2)] [System.UInt32] $MergeMode, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $PVSServerName = 'localhost', [Parameter()] [ValidateNotNullOrEmpty()] [System.UInt64] $SoapPort = 54321, [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $Username, [Parameter()] [ValidateNotNullOrEmpty()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Password ) $targetResource = Get-TargetResource @PSBoundParameters; $farmconfig = Get-PvsFarm -Fields FarmId foreach ($property in $PSBoundParameters.Keys) { if ($targetResource.ContainsKey($property)) { $expected = $PSBoundParameters[$property]; $actual = $targetResource[$property]; if ($expected -ne $actual) { Write-Verbose "Changing '$property' from '$actual' to '$expected'" $farmconfig.$property = $expected } } } Write-Verbose "PVS Farm changes are being applied..." $farmconfig | Set-PvsFarm } #end function Set-TargetResource $moduleRoot = Split-Path -Path $MyInvocation.MyCommand.Path -Parent; ## Import the PVSCommon library functions $moduleParent = Split-Path -Path $moduleRoot -Parent; Import-Module (Join-Path -Path $moduleParent -ChildPath 'CTX_PVSCommon'); Export-ModuleMember -Function *-TargetResource; |