Setup WebClient timeout in PowerShell

If you want to setup timeout value for downloadString method of WebClient Class in PowerShell, you need to extend¬†WebClient Class, because property Timeout isn’t public.

So, in the next example I inherited new ExtendedWebClient Class from WebClient Class. And I add public field Timeout to the new class. Then I overrode GetWebRequest Method to use Timeout field.

$Source = @"
using System.Net;

public class ExtendedWebClient : WebClient
public int Timeout;

protected override WebRequest GetWebRequest(System.Uri address)
WebRequest request = base.GetWebRequest(address);
if (request != null)
request.Timeout = Timeout;
return request;

public ExtendedWebClient()
Timeout = 600000; // Timeout value by default

Add-Type -TypeDefinition $Source -Language CSharp

$webClient = New-Object ExtendedWebClient;
$webClient.Timeout = 1800000; # Change timeout for webClient
$loadData = $webClient.downloadString('http://your_url')

Share your thoughts

This site uses Akismet to reduce spam. Learn how your comment data is processed.