SSRS和PowerShell:创建和设置报告的时间表?

问题描述 投票:2回答:5

有没有办法在一次点击中创建然后更改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"
powershell reporting-services ssrs-2012 schedule
5个回答
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
投票

有一个新的Powershell Module可以自动执行报表服务器上的任务。

看看Cmdlets Set-RsSubscription和New-RsScheduleXml。


0
投票

如果powershell不是您的要求的约束,我可以建议使用以下步骤来使用SSIS:

  1. 使用此链接中说明的方法设置您希望安排的所有报告集:http://www.sqlservercentral.com/articles/Integration+Services+(SSIS)/93504/
  2. 然后,您可以使用SQL Server代理作业计划此SSIS包(在步骤#1中创建)。您可以通过SQL Server代理作业https://www.mssqltips.com/sqlservertutorial/220/scheduling-ssis-packages-with-sql-server-agent/参考以下关于调度SSIS包的链接
  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


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

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

© www.soinside.com 2019 - 2024. All rights reserved.