DSCResources/UpdateServices/UpdateServices.schema.psm1
configuration UpdateServices { [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments')] param ( [Parameter()] [hashtable] $Server, [Parameter()] [hashtable] $Cleanup, [Parameter()] [hashtable[]] $ApprovalRules ) Import-DscResource -ModuleName PSDesiredStateConfiguration Import-DscResource -ModuleName UpdateServicesDsc # Remove case sensitivity of ordered Dictionary or Hashtables if ($null -ne $Server) { $Server = @{} + $Server } WindowsFeature winFeatureWsusServices { Name = 'UpdateServices-Services' Ensure = 'Present' } WindowsFeature winFeatureWsusRSAT { Ensure = 'Present' Name = 'UpdateServices-RSAT' IncludeAllSubFeature = $True DependsOn = '[WindowsFeature]winFeatureWsusServices' } [string]$wsusDependsOn = '[WindowsFeature]winFeatureWsusRSAT' if (($null -ne $Server) -and (-not [String]::IsNullOrWhitespace($Server.SqlServer))) { WindowsFeature winFeatureWsusSQL { Name = 'UpdateServices-DB' Ensure = 'Present' DependsOn = $wsusDependsOn } $wsusDependsOn = '[WindowsFeature]winFeatureWsusSQL' } else { WindowsFeature winFeatureWsusWiDB { Name = 'UpdateServices-WidDB' Ensure = 'Present' DependsOn = $wsusDependsOn } $wsusDependsOn = '[WindowsFeature]winFeatureWsusWiDB' } if ($null -ne $Server) { # Remove Case Sensitivity of ordered Dictionary or Hashtables $Server = @{} + $Server if (-not [string]::IsNullOrWhiteSpace($Server.Ensure)) { $Server.Ensure = 'Present' } if ([string]::IsNullOrWhiteSpace($Server.UpdateImprovementProgram)) { $Server.UpdateImprovementProgram = $false } if ([string]::IsNullOrWhiteSpace($Server.Synchronize)) { $Server.Synchronize = $false } if ([string]::IsNullOrWhiteSpace($Server.SynchronizeAutomatically)) { $Server.SynchronizeAutomatically = $false } if ([string]::IsNullOrWhiteSpace($Server.ClientTargetingMode)) { $Server.ClientTargetingMode = 'Client' } # create a specified content directory if (-not [string]::IsNullOrWhiteSpace($Server.ContentDir)) { File wsusContentDir { Ensure = "Present" Type = "Directory" Recurse = $false SourcePath = $null Force = $true MatchSource = $false DestinationPath = $Server.ContentDir DependsOn = $wsusDependsOn } $wsusDependsOn = '[File]wsusContentDir' } # make a reboot before WSUS setup if ((-not [string]::IsNullOrWhiteSpace($Server.ForceRebootBefore)) -and ($Server.ForceRebootBefore -eq 'True')) { $rebootKeyName = 'HKLM:\SOFTWARE\DSC Community\CommonTasks\RebootRequests' $rebootVarName = 'RebootBefore_UpdateServices_Server' Script $rebootVarName { TestScript = { $val = Get-ItemProperty -Path $using:rebootKeyName -Name $using:rebootVarName -ErrorAction SilentlyContinue if ($val -ne $null -and $val.$rebootVarName -gt 0) { return $true } return $false } SetScript = { if (-not (Test-Path -Path $using:rebootKeyName)) { New-Item -Path $using:rebootKeyName -Force } Set-ItemProperty -Path $rebootKeyName -Name $using:rebootVarName -value 1 $global:DSCMachineStatus = 1 } GetScript = { return ` @{ result = 'result' } } DependsOn = $wsusDependsOn } $wsusDependsOn = "[Script]$rebootVarName" } $Server.DependsOn = $wsusDependsOn $Server.Remove('ForceRebootBefore') (Get-DscSplattedResource -ResourceName UpdateServicesServer -ExecutionName wsusSrv -Properties $Server -NoInvoke).Invoke($Server) $wsusDependsOn = '[UpdateServicesServer]wsusSrv' } if ($null -ne $ApprovalRules) { foreach ($rule in $ApprovalRules.GetEnumerator()) { # Remove case sensitivity of ordered Dictionary or Hashtables $rule = @{} + $rule $rule.DependsOn = $wsusDependsOn if (-not [string]::IsNullOrWhiteSpace($rule.Ensure)) { $rule.Ensure = 'Present' } (Get-DscSplattedResource -ResourceName UpdateServicesApprovalRule -ExecutionName "wsus$($rule.Name)" -Properties $rule -NoInvoke).Invoke($rule) } } if ($null -ne $Cleanup) { # Remove case sensitivity of ordered Dictionary or Hashtables $Cleanup = @{} + $Cleanup $CleanUp.DependsOn = $wsusDependsOn if (-not [string]::IsNullOrWhiteSpace($CleanUp.Ensure)) { $CleanUp.Ensure = 'Present' } (Get-DscSplattedResource -ResourceName UpdateServicesCleanup -ExecutionName wsusCleanup -Properties $CleanUp -NoInvoke).Invoke($CleanUp) } } |