#PSTip Validate if proxy credentials are required
I write scripts that include downloading content from the Internet. Now, I want these scripts to work even when I am behind a proxy server. There is a simple way in .NET to check if we are behind a proxy. For this purpose, we will use System.Net.WebClient .NET class.
Function Test-Proxy {
$wc = New-Object System.Net.WebClient
$wc.Proxy.IsBypassed("http://www.microsoft.com")
}
The Test-Proxy function returns False if you are behind a proxy server.
Note: The following example works only on PowerShell 3.0 and above.
I use this effectively along with the $PSDefaultParameterValues in PowerShell 3.0. For example, in a script to download content from Internet, I will have to set proxy credentials for the Start-BitsTransfer cmdlet. This is how I do it:
if (-not (Test-Proxy)) {
if (-not ($PSDefaultParameterValues.ContainsKey("Start-BitsTransfer:ProxyAuthentication")) -and ($PSDefaultParameterValues.ContainsKey("Start-BitsTransfer:ProxyAuthentication"))) {
$cred = Get-Credential -Message "Enter Proxy authentication credentials" -UserName "${env:USERDOMAIN}\${env:UserName}"
$PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyAuthentication","Basic")
$PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyCredential",$cred)
}
}
If we place the above code snippet at the beginning of the script, it first checks if proxy authentication is required for Internet access and sets the default parameter values for Start-BitsTransfer cmdlet.
Share on: