SSRS&PowerShell:创建并设置报告时间表吗?

时间:2018-08-23 18:39:02

标签: powershell reporting-services ssrs-2012 schedule

是否可以一键创建然后更改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"

5 个答案:

答案 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:

  1. 使用此链接中说明的方法来设置您希望安排的所有报告集: http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/93504/

  2. 然后,您可以使用SQL Server代理作业计划此SSIS包(在步骤1中创建)。您可以参考以下有关通过SQL Server代理作业计划SSIS包的链接 https://www.mssqltips.com/sqlservertutorial/220/scheduling-ssis-packages-with-sql-server-agent/

  3. 然后使用存储过程: sp_update_schedule ,您可以在任何时间点通过UI更改单个叮当声中的Sql Server Agent作业计划,也可以根据需要执行此过程。有关更多详细信息,请参见下面的链接。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-schedule-transact-sql?view=sql-server-2017

答案 3 :(得分:0)

下面是另一个可以满足您要求的选项。

  1. 使用此链接中说明的方法来设置您希望安排的所有报告集:http://www.bi-rootdata.com/2018/08/execute-ssrs-subscription-on-demand.html
  2. 然后,您可以使用SQL Server代理作业计划批处理文件(在步骤1中创建)。您可以参考以下有关通过SQL Server代理作业https://sharminjahan625.wordpress.com/2013/08/30/384/计划批处理文件的链接
  3. 然后通过使用存储过程:sp_update_schedule,可以在UI的单个单击上的任何时间点更改Sql Server Agent作业计划,也可以根据需要执行此过程。有关更多详细信息,请参见下面的链接。 https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-schedule-transact-sql?view=sql-server-2017

答案 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?为了我。大概是新的计划实体。