PowerShellは、SQL Server Reporting ServicesのRDLファイルをスクリプト化できますか?
-
03-07-2019 - |
質問
PowerShellを使用して、SQL Server 2008でSQL Server Reporting Servicesのrdlファイルをスクリプトアウトすることはできますか?もしそうなら、誰かがこれを行うコード例を提供できますか?これは、サードパーティのツールを使用して、ビジネスインテリジェンス部門以外のビジネスユーザーによって作成されたRDLファイルをスクリプト化するための便利な代替手段になります。
用語の明確化" SCRIPT OUT"
「スクリプト出力」とは、サーバー上の各レポートの基になるRDLファイルを自動的に生成することを意味します。たとえば、BIDSでレポートをコーディングすると、RDLファイルが生成されます。ファイルをサーバーに展開すると、ファイルは何らかの方法でSQL Server ReportServerデータベースにインポートされ、個別の物理RDLファイルではなくなります。サーバーからすべてのレポートをRDLファイル形式で抽出したいと思います。
RSScripterツールを使用してレポートをRDLファイルとして抽出したので、PowerShell以外のツールを使用しても可能です。 PowerShellを使用して実行できるかどうかを具体的に知りたい場合は、実行するコードのサンプルを取得します。
RDLレポートのバージョンを生成する理由の明確化
「スクリプトを出力する」ことが重要な理由RDLファイルへのレポート?ビジネスインテリジェンス部門以外のユーザーが作成したすべてのレポートを追跡するために、RDLファイルを1晩に1回ソース管理システムにチェックインしたいと思います。 BIDSでレポートを開発しているため、すでに部門で生成されたすべてのレポートを追跡していますが、オンラインレポートビルダーツールで作成されたレポートのバージョン管理履歴を追跡することはできません。
他の何かではなくパワーシェルの明確化
-
好奇心。 2つの方法(APIまたはRSSCripter)のいずれかで解決できることがわかっている問題があり、3番目の方法で解決できるかどうかを知りたいです。
-
PowerShellを使用して問題解決ツールを拡張する機会。 PowerShellを使用してこの問題を解決することは、PowerShellを使用して、まだ解決しようとしていない他の問題を解決する方法を学習するための基盤を提供します。
-
PowerShellは、私のチームと私にとって理解しやすいものです。一般に、チームメンバーと私は.NETコードよりも簡単にPowerShellコードを理解できます。この問題はAPIを使用して.NETコードで解決できることはわかっていますが(これがRSScripterの仕組みです)、PowerShellスクリプトをコーディングして保守する方が簡単だと感じています。 PowerShellスクリプトはおそらく.NETコードを使用することもわかっていますが、PowerShellが既に何らかの方法でレポートをオブジェクトのように扱うことができることを望んでいるので、Reporting Services APIを使用してファイルを抽出する必要はありません
-
RSScripterは、2008をまだサポートしていません。過去に、私はRSScriptを使用してレポートのスクリプトを作成しました。残念ながら、まだ2008をサポートしていないようです。これは、自動化された無人の方法でファイルを抽出する方法を知っている唯一の方法であるため、今すぐAPIに対してコードを記述する必要があることを意味します。
解決
少し遅れましたが、ここに行きます
このPowerShellスクリプト: 1.レポートサーバーに接続します 2.レポートサーバーにあるのと同じフォルダー構造を作成します。 3.すべてのSSRSレポート定義(RDL)ファイルをそれぞれのフォルダーにダウンロードします
他のヒント
PowerShellは、PowerShell風のネイティブ機能を提供していません。 PowerShellは、基になるFrameworkクラスにアクセスできるため、PowerShellでこれを行うことができます(前の回答で説明したとおり)。前の回答へのコメントで述べたように、C#またはVBでAPIを使用することと同じです。
SQL Serverチームは、PowerShell固有の機能をまだ提供していません。彼らは主に、「スクリプト言語」として.NETとT-SQLに依存しています。
ReportServer.dbo.CatalogのContent列にイメージ形式の定義が含まれていることに気付きました。読みやすいテキストに変換するために次のコードを書きました:
SELECT CONVERT(VARCHAR(MAX), CONVERT(NVARCHAR(MAX), CONVERT(XML, CONVERT(VARBINARY(MAX), Content))))
FROM [ReportServer].[dbo].[Catalog]
WHERE Type = 2
上記のコードを使用して、結果をフラットファイルに自動的に書き込み、ファイルをバージョン管理システムにインポートできるようになりました。
.Netをサポートするものはすべてこれを行うことができます。一部については、このStackoverflowの投稿をご覧ください。 APIドキュメントへのリンク。このプロセスは実際にはかなり簡単です-APIは.rdlファイルをアップロードまたはダウンロードするための呼び出しを持っています。
レポートモデルはもう少し面倒です。新しいレポートモデルをアップロードする場合は、依存レポートを取得し(再度API呼び出し)、データソースを再接続する必要があります。繰り返しますが、それほど激しくありません。
Powershellはこれで問題ありません。 IronPythonとC#でこれをさまざまに行ってきました。 rs.exeと呼ばれるツールもあり、vb.netスクリプトを取得し、いくつかのインクルードでトップとテールを実行し、バックグラウンドでコンパイルして実行します。