Powershell脚本webclient超时(1:40)调用SSRS报告



在活动批处理中,我有一个使用Powershell脚本运行的报告。脚本如下所示:

$wc=new-object system.net.webclient -ErrorVariable err
$wc.UseDefaultCredentials = $true
$url = "http://SSRS-SERVER/etc...&rs:Command=Render&rs:Format=EXCEL"
$file = "ReportName.xls"
echo $url
echo $file
$wc.downloadfile($url,$file)
$err.count
$err 

当它比1分40秒快的时候,这个脚本运行得很好,我已经读过webclient的默认超时是100 -所以这是有意义的。

我试过添加:

$wc.Timeout = 500

但是运气不好。它说:

在此对象上找不到属性'Timeout';确保它存在并且是可设置的。

有人能让我知道如何延长这个脚本的超时时间吗?

如果您使用的是Powershell 3.0或更高版本,您可以使用Invoke-WebRequest并设置超时

Invoke-WebRequest $url -UseDefaultCredentials -OutFile ReportName.xls -TimeoutSec 500

你可以在powershell中扩展c#类来暴露timeout属性。

$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 = 100000; // Timeout value by default 
    } 
} 
"@;
Add-Type -TypeDefinition $Source -Language CSharp
$webClient = New-Object ExtendedWebClient; 
# Change timeout for webClient 
$webClient.Timeout = 1800000; // milliseconds
$loadData = $webClient.downloadString('http://your_url')

来源:Mikhail Kozlov

最新更新