DscResources/UpdateServices/UpdateServices.schema.psm1
configuration UpdateServices { 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 } [string]$wsusDependsOn = '[WindowsFeature]winFeatureWsusServices' WindowsFeature winFeatureWsusServices { Name = 'UpdateServices-Services' Ensure = 'Present' } WindowsFeature winFeatureWsusRSAT { Ensure = 'Present' Name = 'UpdateServices-RSAT' IncludeAllSubFeature = $True DependsOn = $wsusDependsOn } if( ($null -ne $Server) -and (-not [String]::IsNullOrWhitespace($Server.SqlServer)) ) { WindowsFeature winFeatureWsusSQL { Name = 'UpdateServices-DB' Ensure = 'Present' DependsOn = $wsusDependsOn } } else { WindowsFeature winFeatureWsusWiDB { Name = 'UpdateServices-WidDB' Ensure = 'Present' DependsOn = $wsusDependsOn } } if( $null -ne $Server ) { # Remove Case Sensitivity of ordered Dictionary or Hashtables $Server = @{}+$Server $Server.DependsOn = $wsusDependsOn 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 } } # 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.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) } } |