Public/Set-GDriveProxySetting.ps1

<#
.SYNOPSIS
    Set Proxy Settings for use in GDrive functions
.DESCRIPTION
    Set Proxy Settings for use in GDrive functions
    Request-GDriveAuthorizationCode does not use this settings because it IE based
.EXAMPLE
    # Set Proxy
    Set-GDriveProxySettings -Proxy http://mycorpproxy.mydomain
.EXAMPLE
    # Remove Proxy
    Set-GDriveProxySettings -Proxy ''
.EXAMPLE
    # Set default system Proxy
    Set-GDriveProxySettings -UseDefaultSystemProxy
.OUTPUTS
    None
.NOTES
    Author: Max Kozlov
.LINK
    Get-GDriveProxySetting
#>

function Set-GDriveProxySetting {
[CmdletBinding(SupportsShouldProcess=$true, DefaultParameterSetName='plain')]
param(
    [Parameter(ValueFromPipelineByPropertyName, ParameterSetName='plain')]
    [Uri]$Proxy,
    [Parameter(ValueFromPipelineByPropertyName, ParameterSetName='plain')]
    [PSCredential]$ProxyCredential,
    [Parameter(ValueFromPipelineByPropertyName, ParameterSetName='plain')]
    [switch]$ProxyUseDefaultCredentials,
    [Parameter(ParameterSetName='default')]
    [bool]$UseDefaultSystemProxy
)
    BEGIN {
    }
    PROCESS {
    }
    END {
        if ($PSCmdlet.ShouldProcess("Set New Proxy settings")) {
            if ($Proxy -and $Proxy.IsAbsoluteUri) {
                $GDriveProxySettings.Proxy = $Proxy
            }
            else {
                if ($Proxy.OriginalString) {
                       Write-Error 'Invalid proxy URI, may be you forget http:// prefix ?'
                }
                else {
                    [void]$GDriveProxySettings.Remove('Proxy')
                }
            }
            if ($ProxyCredential) {
                $GDriveProxySettings.ProxyCredential = $ProxyCredential
            }
            else {
                [void]$GDriveProxySettings.Remove('ProxyCredential')
            }
            if ($ProxyUseDefaultCredentials) {
                $GDriveProxySettings.ProxyUseDefaultCredentials = $ProxyUseDefaultCredentials
            }
            else {
                [void]$GDriveProxySettings.Remove('ProxyUseDefaultCredentials')
            }
            if ($PSCmdlet.ParameterSetName -eq 'default') {
                if ($UseDefaultSystemProxy) {
                    if ($PSVersionTable.PSVersion.Major -gt 5) {
                        [System.Net.Http.HttpClient]::DefaultProxy = $GDriveDefaultSystemProxy
                    }
                    else {
                        [System.Net.WebRequest]::DefaultWebProxy = $GDriveDefaultSystemProxy
                    }
                }
                else {
                    if ($PSVersionTable.PSVersion.Major -gt 5) {
                        [System.Net.Http.HttpClient]::DefaultProxy = $GDriveEmptySystemProxy
                    }
                    else {
                        [System.Net.WebRequest]::DefaultWebProxy = $GDriveEmptySystemProxy
                    }
                }
            }
        }
    }
}