tests/Test-WsusWebConfig.ps1
function Test-WsusWebConfig { [CmdletBinding()] param ( [parameter()][string] $TestName = "Test-WsusWebConfig", [parameter()][string] $TestGroup = "configuration", [parameter()][string] $Description = "Validate WSUS web configuration file parameters", [parameter()][hashtable] $ScriptParams, [parameter()][int32] $MaxCachedUpdates = 88000, [parameter()][int32] $MaxInstalledPrerequisites = 800, [parameter()][ValidateNotNullOrEmpty()][string] $ConfigFile = "$($env:PROGRAMFILES)\Update Services\WebServices\ClientWebService\Web.config" ) try { [System.Collections.Generic.List[PSObject]]$tempdata = @() # for detailed test output to return if needed $stat = "PASS" $msg = "No issues found" if (!(Test-Path $ConfigFile)) { throw "config file not found: $ConfigFile" } # read file contents into XML DOM instance [xml]$webconfig = Get-Content $ConfigFile # read file contents into text stream instance $webconfigraw = Get-Content $ConfigFile $c1 = $webconfig.configuration.appSettings.add | Where-Object {$_.key -eq 'maxCachedUpdates'} $c2 = $webconfig.configuration.appSettings.add | Where-Object {$_.key -eq 'maxInstalledPrerequisites'} if ($c1.value -ne $MaxCachedUpdates) { if ($ScriptParams.Remediate -eq $True) { $msg = "Updated MaxCachedUpdates $($c1.value) to $MaxCachedUpdates" $webconfigraw = $webconfigraw -replace '<add key="maxCachedUpdates" value="22000"/>', '<add key="maxCachedUpdates" value="$MaxCachedUpdates"/>' $stat = "REMEDIATED" } else { $stat = "FAIL" $msg = "MaxCachedUpdates currently $($c1.value) should be $MaxCachedUpdates" $tempdata.Add("MaxCachedUpdates=$($c1.Value),Expected=$($MaxCachedUpdates)") } } if ($c2.value -ne $MaxInstalledPrerequisites) { if ($ScriptParams.Remediate -eq $True) { $msg = "Updated MaxInstalledPrerequisites $($c2.value) to $MaxInstalledPrerequisites" $webconfigraw = $webconfigraw -replace '<add key="maxInstalledPrerequisites" value="400"/>', '<add key="maxInstalledPrerequisites" value="$MaxInstalledPrerequisites"/>' } else { $stat = "FAIL" $msg = "MaxInstalledPrerequisites currently $($c2.value) should be $MaxInstalledPrerequisites" $tempdata.Add("MaxInstalledPrerequisites=$($c2.Value),Expected=$($MaxInstalledPrerequisites)") } } # more voodoo witchcraft and smoking chickenbones needed here # $webconfigraw } catch { $stat = 'ERROR' $msg = $_.Exception.Message -join ';' } finally { Write-Output $([pscustomobject]@{ TestName = $TestName TestGroup = $TestGroup TestData = $tempdata Description = $Description Status = $stat Message = $msg }) } } |