是否可以一键创建然后更改SSRS上文件夹中所有报告的计划?我有很多报告,我不知道一种方法,只能逐个进行。
======================================
编辑:18/8/30
我在创建时间表时遇到了一些麻烦(然后我仍然需要将其设置为所有报告):
$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"
答案 0 :(得分:2)
创建时间表
您可以使用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)
}
答案 1 :(得分:1)
有一个新的Powershell Module用于自动执行报表服务器上的任务。
看看Cmdlet Set-RsSubscription和New-RsScheduleXml。
答案 2 :(得分:0)
如果powershell不是您的要求的约束,我可以建议通过以下步骤为此使用SSIS:
使用此链接中说明的方法来设置您希望安排的所有报告集: http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/93504/
然后,您可以使用SQL Server代理作业计划此SSIS包(在步骤1中创建)。您可以参考以下有关通过SQL Server代理作业计划SSIS包的链接 https://www.mssqltips.com/sqlservertutorial/220/scheduling-ssis-packages-with-sql-server-agent/
然后使用存储过程: sp_update_schedule ,您可以在任何时间点通过UI更改单个叮当声中的Sql Server Agent作业计划,也可以根据需要执行此过程。有关更多详细信息,请参见下面的链接。
答案 3 :(得分:0)
下面是另一个可以满足您要求的选项。
答案 4 :(得分:0)
当前,这是一个较长的评论,但我认为这可能会有所帮助。
我有一个较旧的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?为了我。大概是新的计划实体。