有没有办法在一次点击中创建然后更改SSRS文件夹中所有报告的计划?我有很多报告,我不知道有什么方法,但一个接一个地做。
========================================
编辑:8/30/18
我在创建计划时遇到了一些麻烦(然后我仍然需要将其设置为所有报告):
$ScheduleDefinition = New-Object SSRS.ScheduleDefinition
$ScheduleDefinition.StartDateTime = [DateTime] "01/01/2018 12:00:00 AM"
$ScheduleDefinition.EndDate = [DateTime] "01/01/2050 12:00:00 AM"
$ScheduleDefinition.EndDateSpecified = "True"
$CreateSchedule = $ReportServerProxy.CreateSchedule("Report Schedule",$ScheduleDefinition,$null)
结果是:
Cannot convert argument "ScheduleDefinition", with value: "SSRS.ScheduleDefinition", for "CreateSchedule" to type "SSRS.ScheduleDefinition": "Cannot convert the "SSRS.ScheduleDefinition" value of type "SSRS.ScheduleDefinition" to type "SSRS.ScheduleDefinition"."
我是如何建立联系的:
$ReportServerUri = "http://localhost/reportserver/ReportService2010.asmx?wsdl"
$ReportServerProxy = New-WebServiceProxy -Uri $ReportServerUri -UseDefaultCredential -Namespace "SSRS"
创建计划
您可以使用CreateSchedule
函数创建共享计划:
$svcUrl = 'http://your-server-name/ReportServer/reportservice2010.asmx'
$svc = New-WebServiceProxy -Class 'RS' -Namespace 'RS' -Uri $svcUrl -UseDefaultCredential
$definition = New-Object RS.ScheduleDefinition
$scheduleID = ""
$definition.StartDateTime = [DateTime] "01/01/2018 12:00:00 AM"
$recurrence = New-Object RS.DailyRecurrence
$recurrence.DaysInterval = 1
$definition.Item = $recurrence
$scheduleID = $svc.CreateSchedule("My Schedule",$definition, $null);
为文件夹中的所有报告设置历史记录快照计划
然后你可以先使用ListChildren
函数获取所有报告。然后,对于每个报告,您可以使用SetItemHistoryOptions
使用您在上一步中创建的共享计划来设置历史记录快照计划:
$sharedSchedule = New-Object RS.ScheduleReference
$sharedSchedule.ScheduleID = $scheduleID
$reports = $svc.ListChildren("/", $true) | Where-Object { $_.TypeName -eq "Report" }
foreach ($report in $reports) {
$svc.SetItemHistoryOptions($report.Path, $true, $true, $sharedSchedule)
}
有一个新的Powershell Module可以自动执行报表服务器上的任务。
看看Cmdlets Set-RsSubscription和New-RsScheduleXml。
如果powershell不是您的要求的约束,我可以建议使用以下步骤来使用SSIS:
以下是另一个可以满足您要求的选项。
目前这是一个很长的评论,但我认为这可能会有所帮助。
我有一个旧版本的SSRS 2008,并且我使用了一个与我无关的(对此答案)PowerShell模块。我提到这一点是因为当我创建SSRS对象时,我引用了我的连接代理对象的命名空间。如果我不这样做,我会遇到类似于您遇到的类型不匹配错误。
# Get the namespace
$ssrsServiceNamespace = $connectservice.GetType().namespace
# Create the schedule definition
$ScheduleDefinition = New-Object "$ssrsServiceNamespace.ScheduleDefinition"
$ScheduleDefinition.StartDateTime = [DateTime] "01/01/2018 12:00:00 AM"
$ScheduleDefinition.EndDate = [DateTime] "01/01/2050 12:00:00 AM"
$ScheduleDefinition.EndDateSpecified = "True"
# Add it to SSRS
$connectservice.CreateSchedule("test report schedule",$ScheduleDefinition)
结果是GUID?为了我。大概是为新的计划实体。