Pregunta

¿Es posible usar PowerShell para crear secuencias de comandos de los archivos rdl de SQL Server Reporting Services en SQL Server 2008? Si es así, ¿puede alguien proporcionar un ejemplo de código para hacer esto? Esto sería un reemplazo útil para usar una herramienta de terceros para crear secuencias de comandos de archivos RDL creados por usuarios empresariales fuera de mi departamento de Business Intelligence.

ACLARACIÓN DEL TÉRMINO " SCRIPT OUT "

Por " script out " ;, quiero decir, me gustaría generar automáticamente el archivo RDL subyacente para cada informe en el servidor. Por ejemplo, cuando codifica un informe en BIDS, está generando un archivo RDL. Cuando implementa el archivo en el servidor, el archivo se importa de alguna manera a la base de datos del Servidor de informes de SQL Server y ya no es un archivo RDL físico separado. Me gustaría extraer todos los informes del servidor en un formato de archivo RDL.

He usado la herramienta RSScripter para extraer los informes como archivos RDL, así que sé que es posible usar otras herramientas que no sean PowerShell. Específicamente, me gustaría saber si es posible hacerlo utilizando PowerShell y, de ser así, obtener una muestra del código para hacerlo.

ACLARACIÓN DE POR QUÉ QUIERO GENERAR VERSIONES RDL DE INFORMES

¿Por qué es importante " script out " Los informes a archivos RDL? Me gustaría registrar los archivos RDL en mi sistema de control de fuente una vez por noche para realizar un seguimiento de todos los informes creados por usuarios fuera de mi departamento de Business Intelligence. Ya llevo un registro de todos los informes generados por mi departamento desde que desarrollamos nuestros informes en BIDS, pero no puedo hacer un seguimiento del historial de versiones en los informes creados en la herramienta en línea Report Builder.

ACLARACIÓN DE POR QUÉ POWERSHELL Y NO ALGO MÁS

  1. Curiosidad. Tengo un problema que sé que se puede resolver mediante uno de dos métodos (API o RSSCripter) y me gustaría saber si se puede resolver con un tercer método.

  2. Oportunidad de expandir mi herramienta de resolución de problemas a través de PowerShell. El uso de PowerShell para resolver este problema puede proporcionar la base para aprender a usar PowerShell para resolver otros problemas que aún no he intentado resolver.

  3. PowerShell es más fácil de entender para mi equipo y para mí. En general, los miembros de mi equipo y yo podemos entender el código de PowerShell más fácilmente que el código .NET. Aunque sé que este problema se puede resolver con algún código .NET utilizando la API (después de todo, así es como funciona RSScripter), creo que será más fácil para nosotros codificar y mantener un script de PowerShell. También me doy cuenta de que un script de PowerShell probablemente usará código .NET, pero espero que PowerShell ya pueda tratar los informes como objetos de alguna manera, así que no tendré que usar la API de Reporting Services para extraer los archivos.

  4. RSScripter no es compatible con 2008 todavía. En el pasado, he usado RSScript para escribir los informes. Desafortunadamente, no parece ser compatible con 2008 todavía. Esto significa que tengo que escribir código contra la API en este momento, ya que esa es la única forma en que presento saber cómo extraer los archivos de forma automática y sin supervisión.

¿Fue útil?

Solución

un poco tarde, pero aquí tienes

Este script de PowerShell: 1. Se conecta a su servidor de informes 2. Crea la misma estructura de carpetas que tiene en su servidor de informes 3. Descargue todos los archivos de definición de informe (RDL) de SSRS en sus carpetas respectivas

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

Otros consejos

PowerShell no proporciona ninguna funcionalidad nativa de PowerShell para esto, no. Puede hacer esto en PowerShell (como se señaló en la respuesta anterior) solo porque PowerShell puede acceder a las clases de Framework subyacentes. Como anotó en su comentario a la respuesta anterior, no es diferente a usar la API en C # o VB.

El equipo de SQL Server aún no ha brindado mucha información específica sobre PowerShell. Se basan principalmente en .NET y T-SQL como " lenguajes de scripting. & Quot;

Acabo de darme cuenta de la columna Contenido en ReportServer.dbo.Catalog contiene la definición en un formato de imagen. Escribí el siguiente código para convertirlo en texto legible:

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

Con el código anterior, ahora puedo automatizar la escritura de los resultados en un archivo plano y luego importar el archivo a mi sistema de control de versiones.

Cualquier cosa que admita .Net puede hacer esto. Consulte esta publicación Stackoverflow para algunos enlaces a los documentos API. El proceso es bastante sencillo: la API tiene una llamada para cargar o descargar el archivo .rdl.

Los modelos de informes son un poco más complicados. Debe obtener los informes dependientes (una vez más una llamada a la API) y volver a conectar la fuente de datos si carga un nuevo modelo de informe. Una vez más, no es terriblemente agotador.

Powershell debería hacer esto bien. He hecho esto con IronPython y C #. También hay una herramienta llamada rs.exe que toma una secuencia de comandos vb.net, la encabeza y la complementa con algunos elementos incluidos, la compila y la ejecuta entre bastidores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top