Private/InitializeProxySettings.ps1

function InitializeProxySettings {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, Position = 0)]
        $WsusConfig
    )

    if (!$WsusConfig.UseProxy) {
        Write-Verbose "WSUS configuration is set to not use a proxy."
        return $true
    }

    if ($WsusConfig.AnonymousProxyAccess) {
        Write-Verbose "WSUS proxy is set to allow anonymous access."
        return $true
    }

    if ($WsusConfig.HasProxyPassword -and !$WsusConfig.AllowProxyCredentialsOverNonSsl) {
        Write-Error -Message "WSUS proxy has a proxy password, but is not allowing proxy credentials over non-SSL (in plaintext). Only HTTP proxies are supported by this cmdlet." `
            -Category InvalidOperation `
            -ErrorId "ProxyMustAllowNonSslAuth"
        return $false
    }

    Write-Verbose "WSUS server is using a supported proxy configuration."
    $username = $WsusConfig.ProxyUserName

    if (![string]::IsNullOrWhiteSpace($WsusConfig.ProxyUserDomain)) {
        $username = "$( $WsusConfig.ProxyUserDomain )\$username"
        Write-Verbose "WSUS proxy has set the user domain name. The full proxy username is: $username"
    }

    if ($WsusConfig.HasProxyPassword) {
        Write-Verbose "WSUS proxy has a password set."
        $Script:ProxyCredentials = New-Object -TypeName "PSCredential" -ArgumentList @(
            $username,
            (ConvertTo-SecureString $WsusConfig.ProxyPassword -AsPlainText -Force)
        )
    } else {
        $Script:ProxyCredentials = New-Object -TypeName "PSCredential" -ArgumentList @(
            $username,
            (New-Object -TypeName "SecureString")
        )
    }

    $Script:HttpProxy = "http://{0}:{1}" -f ($WsusConfig.ProxyName, $WsusConfig.ProxyServerPort)
    $Script:HttpsProxy = $Script:HttpProxy
    Write-Verbose "WSUS proxy is set to $( $Script:HttpProxy )."

    if ($WsusConfig.UseSeparateProxyForSsl) {
        $Script:HttpsProxy = "http://{0}:{1}" -f ($WsusConfig.SslProxyName, $WsusConfig.SslProxyServerPort)
        Write-Verbose "WSUS server is using a separate proxy for SSL connections: $( $Script:HttpsProxy )"
    }

    return $true
}

# Copyright (c) 2023 AJ Tek Corporation. All Rights Reserved.