Question

Est-il possible d'utiliser PowerShell pour scripter les fichiers rdl de SQL Server Reporting Services dans SQL Server 2008? Si oui, quelqu'un peut-il fournir un exemple de code pour cela? Cela remplacerait utilement l’utilisation d’un outil tiers pour la création de scripts pour les fichiers RDL créés par des utilisateurs professionnels en dehors de mon département Business Intelligence.

CLARIFICATION DU TERME "SCRIPT OUT"

Par "script sorti", je veux dire que je souhaite générer automatiquement le fichier RDL sous-jacent pour chaque rapport sur le serveur. Par exemple, lorsque vous codez un rapport dans BIDS, vous générez un fichier RDL. Lorsque vous déployez le fichier sur le serveur, le fichier est en quelque sorte importé dans la base de données SQL Server ReportServer et il ne s'agit plus d'un fichier RDL physique distinct. Je voudrais extraire tous les rapports du serveur dans un format de fichier RDL.

J'ai utilisé l'outil RSScripter pour extraire les rapports sous forme de fichiers RDL. Je sais donc qu'il est possible d'utiliser des outils autres que PowerShell. J'aimerais particulièrement savoir s'il est possible de le faire avec PowerShell et, le cas échéant, d'obtenir un exemple du code pour le faire.

CLARIFICATION POURQUOI JE VEUX GÉNÉRER DES VERSIONS DE RAPPORTS RDL

Pourquoi est-il important de & lâcher un script " les rapports dans les fichiers RDL? Je souhaite archiver les fichiers RDL dans mon système de contrôle de source une fois par nuit pour garder une trace de tous les rapports créés par des utilisateurs extérieurs à mon service de Business Intelligence. Je garde déjà une trace de tous les rapports générés par mon département depuis que nous développons nos rapports dans BIDS, mais je ne peux pas garder l’historique des versions dans les rapports intégrés à l’outil en ligne Report Builder.

CLARIFICATION POURQUOI POWERSHELL ET AUCUN autre chose

  1. Curiosity. J'ai un problème qui, je le sais, peut être résolu par l'une des deux méthodes (API ou RSSCripter) et j'aimerais savoir s'il peut être résolu par une troisième méthode.

  2. Possibilité d'étendre ma boîte à outils pour la résolution de problèmes via PowerShell. L'utilisation de PowerShell pour résoudre ce problème peut fournir les bases pour apprendre à utiliser PowerShell pour résoudre d'autres problèmes que je n'ai pas encore essayé de résoudre.

  3. PowerShell est plus facile à comprendre pour mon équipe et pour moi. En général, les membres de mon équipe et moi-même pouvons comprendre le code PowerShell plus facilement que le code .NET. Bien que je sache que ce problème peut être résolu avec du code .NET à l'aide de l'API (c'est ainsi que RSScripter fonctionne après tout), je pense qu'il sera plus facile pour nous de coder et de gérer un script PowerShell. Je réalise également qu'un script PowerShell utilisera probablement du code .NET, mais j'espère que PowerShell sera déjà en mesure de traiter les rapports comme des objets, de sorte que je n'aurai pas à utiliser l'API de Reporting Services pour extraire les fichiers.

  4. RSScripter ne supporte pas encore 2008. Dans le passé, j'ai utilisé RSScript pour rédiger des rapports. Malheureusement, il ne semble pas encore supporter 2008. Cela signifie que je dois écrire du code contre l'API maintenant car c'est la seule façon dont je présente comment savoir comment extraire les fichiers de manière automatisée sans surveillance.

Était-ce utile?

La solution

un peu en retard, mais ici vous allez

Ce script PowerShell: 1. Se connecte à votre serveur de rapports 2. Crée la même structure de dossiers que celle de votre serveur de rapports 3. Téléchargez tous les fichiers de définition de rapport SSRS (RDL) SSRS dans leurs dossiers respectifs

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

Autres conseils

PowerShell ne fournit aucune fonctionnalité native, PowerShell-esque pour cela, non. Vous pouvez le faire dans PowerShell (comme indiqué dans la réponse précédente) uniquement parce que PowerShell peut accéder aux classes Framework sous-jacentes. Comme vous l'avez noté dans votre commentaire à la réponse précédente, l'utilisation de l'API en C # ou VB n'est pas différente.

L'équipe SQL Server n'a pas encore fourni beaucoup d'informations spécifiques à PowerShell. Ils s'appuient principalement sur .NET et T-SQL en tant que "langages de script".

Je viens de comprendre que la colonne Content du ReportServer.dbo.Catalog contient la définition au format Image. J'ai écrit le code suivant pour le convertir en texte lisible:

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

Avec le code ci-dessus, je peux maintenant automatiser l'écriture des résultats dans un fichier à plat, puis importer le fichier dans mon système de contrôle de version.

Tout ce qui prend en charge .Net peut le faire. Voir cette publication Stackoverflow pour certains liens vers les documents de l'API. Le processus est en réalité assez simple - l'API a un appel pour télécharger ou télécharger le fichier .rdl.

Les modèles de rapport sont un peu plus compliqués. Vous devez obtenir les rapports dépendants (à nouveau un appel d'API) et reconnecter la source de données si vous téléchargez un nouveau modèle de rapport. Encore une fois, pas très fatigant.

Powershell devrait faire cela très bien. Je l'ai fait de différentes manières avec IronPython et C #. Il existe également un outil appelé rs.exe qui prend un script vb.net et le compile et le compile et le exécute dans les coulisses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top