DSCResources/VE_XD7Feature/VE_XD7Feature.ps1
Import-LocalizedData -BindingVariable localizedData -FileName Resources.psd1; function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory)] [ValidateSet('Controller','Studio','Storefront','Licensing','Director')] [System.String] $Role, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $SourcePath, [Parameter()] [AllowNull()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Credential, [Parameter()] [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present' ) process { $targetResource = @{ Role = $Role; SourcePath = $SourcePath; Ensure = 'Absent'; } if (TestXDInstalledRole -Role $Role) { $targetResource['Ensure'] = 'Present'; } return $targetResource; } #end process } #end function Get-TargetResource function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory)] [ValidateSet('Controller','Studio','Storefront','Licensing','Director')] [System.String] $Role, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $SourcePath, [Parameter()] [AllowNull()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Credential, [Parameter()] [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present', [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LogPath = (Join-Path -Path $env:TMP -ChildPath '\Citrix\XenDesktop Installer') ) process { $targetResource = Get-TargetResource @PSBoundParameters; if ($Ensure -eq $targetResource.Ensure) { Write-Verbose ($localizedData.ResourceInDesiredState -f $Role); return $true; } else { Write-Verbose ($localizedData.ResourceNotInDesiredState -f $Role); return $false; } } #end process } #end function Test-TargetResource function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory)] [ValidateSet('Controller','Studio','Storefront','Licensing','Director')] [System.String] $Role, [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $SourcePath, [Parameter()] [AllowNull()] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Credential, [Parameter()] [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present', [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LogPath = (Join-Path -Path $env:TMP -ChildPath '\Citrix\XenDesktop Installer') ) begin { if (-not (Test-Path -Path $SourcePath -PathType Container)) { throw ($localizedData.InvalidSourcePathError -f $SourcePath); } } process { if ($Ensure -eq 'Present') { Write-Verbose ($localizedData.InstallingRole -f $Role); $installArguments = ResolveXDServerSetupArguments -Role $Role -LogPath $LogPath; } else { ## Uninstall Write-Verbose ($localizedData.UninstallingRole -f $Role); $installArguments = ResolveXDServerSetupArguments -Role $Role -LogPath $LogPath -Uninstall; } Write-Verbose ($localizedData.LogDirectorySet -f $logPath); Write-Verbose ($localizedData.SourceDirectorySet -f $SourcePath); $startWaitProcessParams = @{ FilePath = ResolveXDSetupMedia -Role $Role -SourcePath $SourcePath; ArgumentList = $installArguments; } if ($PSBoundParameters.ContainsKey('Credential')) { $startWaitProcessParams['Credential'] = $Credential; } $exitCode = StartWaitProcess @startWaitProcessParams; # Check for reboot if (($exitCode -eq 3010) -or ($Role -eq 'Controller')) { $global:DSCMachineStatus = 1; } } #end process } #end function Set-TargetResource #region Private Functions function ResolveXDServerSetupArguments { <# .SYNOPSIS Resolve the installation arguments for the associated XenDesktop role. #> [CmdletBinding()] [OutputType([System.String])] param ( ## Citrix XenDesktop 7.x role to install/uninstall. [Parameter(Mandatory)] [ValidateSet('Controller','Studio','Storefront','Licensing','Director')] [System.String] $Role, ## Citrix XenDesktop 7.x installation media path. [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LogPath = (Join-Path -Path $env:TMP -ChildPath '\Citrix\XenDesktop Installer'), ## Uninstall Citrix XenDesktop 7.x product. [Parameter()] [System.Management.Automation.SwitchParameter] $Uninstall ) process { $arguments = New-Object -TypeName System.Collections.ArrayList -ArgumentList @(); $arguments.AddRange(@('/QUIET', '/LOGPATH', "`"$LogPath`"", '/NOREBOOT', '/COMPONENTS')); switch ($Role) { ## Install/uninstall component names by role 'Controller' { [ref] $null = $arguments.Add('CONTROLLER'); } 'Studio' { [ref] $null = $arguments.Add('DESKTOPSTUDIO'); } 'Storefront' { [ref] $null = $arguments.Add('STOREFRONT'); } 'Licensing' { [ref] $null = $arguments.Add('LICENSESERVER'); } 'Director' { [ref] $null = $arguments.Add('DESKTOPDIRECTOR'); } } #end switch Role if ($Uninstall) { [ref] $null = $arguments.Add('/REMOVE'); } else { ## Additional install parameters per role switch ($Role) { 'Controller' { $arguments.AddRange(@('/CONFIGURE_FIREWALL', '/NOSQL')); } 'Studio' { $arguments.AddRange(@('/CONFIGURE_FIREWALL')); } 'Storefront' { $arguments.AddRange(@('/CONFIGURE_FIREWALL')); } 'Licensing' { $arguments.AddRange(@('/CONFIGURE_FIREWALL')); } 'Director' { }; } #end switch Role } return [System.String]::Join(' ', $arguments.ToArray()); } #end process } #end function ResolveXDSetupArguments #endregion Private Functions |