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

时间:2016-11-04 20:24:34

标签: powershell ssrs-2008-r2

在活动批处理中,我有一个使用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

但没有运气。它说:

  

在此对象上找不到属性“超时”;确保它存在并且可以设置。

有人可以告诉我如何延长此脚本的超时时间吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以在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 = 600000; // Timeout value by default 
    } 
} 
"@;

Add-Type -TypeDefinition $Source -Language CSharp

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

信用至:Mikhail Kozlov