Frage

Ist es möglich, PowerShell zu verwenden, um SQL Server Reporting Services RDL -Dateien in SQL Server 2008 zu entfassen? Wenn ja, kann jemand ein Codebeispiel dafür angeben? Dies wäre ein nützlicher Ersatz für die Verwendung mit einem Drittanbieter -Tool zum Skript von RDL -Dateien, die von Geschäftsnutzern außerhalb meiner Business Intelligence -Abteilung erstellt wurden.

Klärung des Begriffs "Skript out"

Mit "Skript out" meine ich, ich möchte die zugrunde liegende RDL -Datei für jeden Bericht auf dem Server automatisch generieren. Wenn Sie beispielsweise in Angeboten den Bericht codieren, generieren Sie eine RDL -Datei. Wenn Sie die Datei auf dem Server bereitstellen, wird die Datei irgendwie in die SQL Server ReportServer -Datenbank importiert und es handelt sich nicht mehr um eine separate physische RDL -Datei. Ich möchte alle Berichte aus dem Server in einem RDL -Dateiformat extrahieren.

Ich habe das RSScripter -Tool verwendet, um die Berichte als RDL -Dateien zu extrahieren, daher weiß ich, dass es möglich ist, andere Tools als PowerShell zu verwenden. Ich möchte ausdrücklich wissen, ob es möglich ist, es mit PowerShell zu tun, und wenn ja, erhalten Sie eine Stichprobe des Codes, um dies zu tun.

Klärung darüber, warum ich RDL -Versionen von Berichten generieren möchte

Warum ist es wichtig, die Berichte an RDL -Dateien zu "kripten"? Ich möchte die RDL-Dateien einmal pro Nacht in mein Quellvertretungssystem einchecken, um alle Berichte zu verfolgen, die von Benutzern außerhalb meiner Business Intelligence-Abteilung erstellt wurden. Ich habe bereits alle von meiner Abteilung generierten Berichte nachverfolgt, da wir unsere Berichte in Angeboten entwickeln, aber ich kann die Versionsverlaufsgeschichte auf Berichten, die im Online -Berichtstor -Builder -Tool aufgebaut wurden, nicht verfolgen.

Klarstellung, warum Powershell und nicht etwas anderes

  1. Neugier. Ich habe ein Problem, von dem ich weiß, dass er durch eine von zwei Methoden gelöst werden kann (API oder RSScripter), und ich würde gerne wissen, ob es durch eine 3. Methode gelöst werden kann.

  2. Gelegenheit, mein Problemlösungs -Toolbet über PowerShell zu erweitern. Die Verwendung von PowerShell zur Lösung dieses Problems kann die Grundlage für das Lernen bieten, wie PowerShell verwendet wird, um andere Probleme zu lösen, die ich noch nicht zu lösen versuchte.

  3. Powershell ist für mein Team und mich leichter zu verstehen. Im Allgemeinen können meine Teammitglieder und ich PowerShell Code leichter verstehen als .NET -Code. Obwohl ich weiß, dass dieses Problem mit einem .NET -Code mit der API gelöst werden kann (so funktioniert RsScripter schließlich), ist es für uns einfacher, ein PowerShell -Skript zu codieren und zu verwalten. Mir ist auch klar, dass ein PowerShell -Skript wahrscheinlich den .NET -Code verwenden wird, aber ich hoffe, dass PowerShell bereits die Berichte wie Objekte auf irgendeine Weise behandeln kann, sodass ich die API der Berichtsdienste nicht verwenden muss, um die Dateien zu extrahieren.

  4. RsScripter unterstützt 2008 noch nicht. In der Vergangenheit habe ich RsScript verwendet, um Berichte zu entfassen. Leider scheint es 2008 noch nicht zu unterstützen. Dies bedeutet, dass ich jetzt Code gegen die API schreiben muss, da ich nur so präsentiere, wie ich die Dateien auf automatisierte unbeaufsichtigte Weise extrahieren kann.

War es hilfreich?

Lösung

Ein bisschen spät, aber hier gehst du

Dieses PowerShell -Skript: 1. Stellt eine Verbindung zu Ihrem Berichtserver 2. Erstellt dieselbe Ordnerstruktur, die Sie in Ihrem Berichtserver haben. 3. Laden Sie alle SSRS -Berichtsdefinitionsdateien (RDL) in ihre jeweiligen Ordner herunter

http://www.sqlmusings.com/2011/03/28/how-to-download-all-your-srs-report-definitions-rdl-files-using-powershell/

Andere Tipps

PowerShell liefert keine native, powershell-ähnliche Funktionen dafür, nein. Sie können dies in PowerShell (wie in der vorherigen Antwort angegeben) nur, weil PowerShell auf die zugrunde liegenden Framework -Klassen zugreifen kann. Wie Sie in Ihrem Kommentar zur vorherigen Antwort festgestellt haben, unterscheidet sich dies nicht von der Verwendung der API in C# oder VB.

Das SQL Server-Team hat noch nicht viel von PowerShell-spezifischem Zeug bereitgestellt. Sie verlassen sich hauptsächlich auf .NET und T-SQL als "Skriptsprachen".

Ich habe gerade die Inhaltsspalte im ReportServer.dbo.catalog erkannt, enthält die Definition in einem Bildformat. Ich habe den folgenden Code geschrieben, um ihn in lesbare Text umzuwandeln:

SELECT CONVERT(VARCHAR(MAX), CONVERT(NVARCHAR(MAX), CONVERT(XML, CONVERT(VARBINARY(MAX), Content))))
FROM [ReportServer].[dbo].[Catalog]
WHERE Type = 2

Mit dem obigen Code kann ich jetzt das Schreiben der Ergebnisse in eine flache Datei automatisieren und die Datei in mein Versionskontrollsystem importieren.

Alles, was .NET unterstützt, kann dies tun. Sehen Dieser Stackoverflow -Posting Für einige Links zu den API -Dokumenten. Der Prozess ist tatsächlich ziemlich einfach - die API hat einen Anruf zum Hochladen oder Herunterladen der .rdl -Datei.

Berichtsmodelle sind etwas fummeliger. Sie müssen die abhängigen Berichte (erneut einen API-Aufruf) abrufen und die Datenquelle neu anschließen, wenn Sie ein neues Berichtsmodell hochladen. Wieder nicht schrecklich anstrengend.

PowerShell sollte dies gut machen. Ich habe das mit Ironpython und C#unterschiedlich gemacht. Es gibt auch ein Tool namens Rs.Exe, das ein VB.NET -Skript aufnimmt, toppt es mit einigen enthält und kompiliert und leitet es hinter den Kulissen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top