Reporting services 自动从SSRS服务器导出RDL格式的所有报告

Reporting services 自动从SSRS服务器导出RDL格式的所有报告,reporting-services,ssrs-2008,ssrs-2008-r2,Reporting Services,Ssrs 2008,Ssrs 2008 R2,SSRS使您能够将报告导出为原始RDL格式: 我想知道的是,是否有一种方法可以将所有报告(通过我可以编写的命令行界面)或某些工具导出为原始RDL格式,然后将其压缩,等等 谢谢您的时间。我还没有测试过这个,但它似乎可以满足您的需要 我已经创建了一个powershell脚本来执行此操作。您必须连接到具有SSRS数据库的SQL server。它将所有文件压缩成一个zip文件 Add-Type -AssemblyName "System.IO.Compression.Filesystem&qu

SSRS使您能够将报告导出为原始RDL格式:

我想知道的是,是否有一种方法可以将所有报告(通过我可以编写的命令行界面)或某些工具导出为原始RDL格式,然后将其压缩,等等


谢谢您的时间。

我还没有测试过这个,但它似乎可以满足您的需要


我已经创建了一个powershell脚本来执行此操作。您必须连接到具有SSRS数据库的SQL server。它将所有文件压缩成一个zip文件

Add-Type -AssemblyName "System.IO.Compression.Filesystem"

$dataSource = "SQLSERVER"
$user = "sa"
$pass = "sqlpassword"
$database = "ReportServer"
$connectionString = "Server=$dataSource;uid=$user; pwd=$pass;Database=$database;Integrated Security=False;"

$tempfolder = "$env:TEMP\Reports"
$zipfile = $PSScriptRoot + '\reports.zip'

$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString

$connection.Open()

$allreports = $connection.CreateCommand()
$allreports.CommandText = "SELECT ItemID, Path, CASE WHEN Type = 2 THEN '.rdl' ELSE 'rds' END AS Ext FROM Catalog WHERE Type IN(2,5)"

$result = $allreports.ExecuteReader()

$reportable = new-object "System.Data.DataTable"
$reportable.Load($result)
[int]$objects = $reportable.Rows.Count
foreach ($report in $reportable) {
    $cmd = $connection.CreateCommand()
    $cmd.CommandText = "SELECT CAST(CAST(Content AS VARBINARY(MAX)) AS XML) FROM Catalog WHERE ItemID = '" + $report[0] + "'"
    $xmldata = [string]$cmd.ExecuteScalar()
    $filename = $tempfolder + $report["Path"].Replace('/', '\') + $report["Ext"]
    New-Item $filename -Force | Out-Null
    Set-Content -Path ($filename) -Value $xmldata -Force
    Write-Host "$($objects.ToString()).$($report["Path"])"
    $objects -= 1
}

Write-Host "Compressing to zip file..."
if (Test-Path $zipfile) {
    Remove-Item $zipfile
}
[IO.Compression.Zipfile]::CreateFromDirectory($tempfolder, $zipfile) 

Write-Host "Removing temporarly data"
Remove-Item -LiteralPath $tempfolder -Force -Recurse

Invoke-Item $zipfile