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