SSRS 2005からSSRS 2017にSSRSレポートをエクスポートしようとしています。移動するレポートは約100ありますが、これらのすべてのレポートで合計で約500のサブスクリプションがあります。
SSMS 2005のScript to file
ツールは時間を大幅に節約しますが、Script to file
関数をプログラムで呼び出す方法はありますか?
データベースをエクスポートするためにPowershellで同様のことを実行できることを知っています。
ジョブを転送するだけで、PowershellがレポートのGUIDをどの程度適切に処理できるかわかりませんが、 rs.exe を使用してスクリプトファイルを実行し、Webサービスを呼び出してダウンロード/コピー/ Reporting Servicesオブジェクトを展開します。
レポートサーバー間でコンテンツをコピーするためのサンプルReporting Services rs.exeスクリプト には、ネイティブスケジュールとSharePoint統合インスタンスの両方で共有スケジュールがサポートされていると記載されています。
以前は、スクリプトを作成するためのGUIを提供する「rsscripter」と呼ばれるツールがありましたが、それがより新しいバージョンでどれほどうまく機能するかはわかりません。これは SQL Server Fine Build に含まれており、次のようになります。
そのツールの元の記事は、archive.orgにまだあります Reporting Services Scripterをダウンロード
この関数は、SQL Serverの移行を容易にするために作成しましたが、1つのサーバーでエージェントジョブを実行し、それらを.sqlファイルとしてディスクに書き込みます。
Function Write-SQLAgentJobs([string]$ServerInstance, [string]$ExportPath)
{
#Create Directory if needed.
If((Test-Path -LiteralPath $ExportPath -PathType Container) -eq $false)
{
New-Item -Path $ExportPath -ItemType Container | Out-Null
Write-Debug -Message "$(Get-Date) - Creating Export Path $($ExportPath)"
}
#Get the Additional Modules needed for doing the work.
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
$SMO = new-object ('Microsoft.SqlServer.Management.Smo.Server') $ServerInstance
#Build Up Scripter Object...
$Scripter = new-object ('Microsoft.SqlServer.Management.Smo.Scripter') ($SMO)
$ScriptOptions = New-Object ('Microsoft.SqlServer.Management.Smo.ScriptingOptions')
$Scripter.Options.ScriptDrops = $False
$Scripter.Options.WithDependencies = $False
$Scripter.Options.IncludeHeaders = $True
$Scripter.Options.AppendToFile = $False
$Scripter.Options.ToFileOnly = $True
$Scripter.Options.ClusteredIndexes = $True
$Scripter.Options.DriAll = $True
$Scripter.Options.Indexes = $True
$Scripter.Options.Triggers = $True
$Scripter.Options = $ScriptOptions
ForEach($Job In ($SMO.JobServer.Jobs | Where-Object -FilterScript {$_.name -ne ""}))
{
$JobName = ConvertTo-ValidPath -TestPath ($Job.name)
$FileName = [System.IO.Path]::Combine($ExportPath, "$($JobName).sql")
If((Test-Path -LiteralPath $FileName -PathType leaf) -eq $true)
{
Remove-Item -LiteralPath $FileName -Force -ErrorAction SilentlyContinue | Out-Null
}
$Scripter.Options.FileName = $FileName
$Scripter.Script($Job) | Out-Null
}
}
Function ConvertTo-ValidPath([string]$TestPath)
{
$invalidChars = [IO.Path]::GetInvalidFileNameChars() -join ''
$re = "[{0}]" -f [RegEx]::Escape($invalidChars)
Write-Output ($TestPath -replace $re)
}