在活动批处理中,我有一个使用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
但没有运气。它说:
在此对象上找不到属性“超时”;确保它存在并且可以设置。
有人可以告诉我如何延长此脚本的超时时间吗?
答案 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