Настройка таймаута WebClient в PowerShell

Чтобы задать таймаут для метода downloadString класса WebClient в PowerShell, класс придётся расширить: свойство Timeout у него не публичное.

В примере я унаследовал класс ExtendedWebClient от WebClient, добавил в него публичное поле Timeout и переопределил метод GetWebRequest, чтобы он это поле использовал.

$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; // Значение таймаута по умолчанию
}
}
"@;

Add-Type -TypeDefinition $Source -Language CSharp

$webClient = New-Object ExtendedWebClient;
$webClient.Timeout = 1800000; # Изменить таймаут для webClient
$loadData = $webClient.downloadString('http://your_url')
Консультирую по продукту, собираю MVP и учу делать продукты самостоятельно. Поработать со мной →