2009-01-03 25 views
6

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

aclaración del término "guión en"

Por "secuencia de comandos a cabo", quiero decir me gustaría generar automáticamente el archivo RDL subyacente para cada informe en el servidor. Por ejemplo, cuando codifica el informe en BIDS, está generando un archivo RDL. Cuando implementa el archivo en el servidor, el archivo se importa de alguna manera en la base de datos de SQL Server ReportServer 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 utilizado la herramienta RSScripter para extraer los informes como archivos RDL, por lo que sé que es posible usar otras herramientas además de PowerShell. Me gustaría saber específicamente si es posible hacerlo con PowerShell y, de ser así, obtener una muestra del código para hacerlo.

ACLARACION SOBRE QUÉ QUIERO PARA GENERAR LAS VERSIONES RDL de los informes

Por qué es importante a los "scripts" a cabo los informes a archivos RDL? Me gustaría registrar los archivos RDL en mi sistema de control de origen una vez por noche para realizar un seguimiento de todos los informes creados por los 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 seguir el historial de versiones en los informes creados en la herramienta en línea Creador de informes.

CLARIFICACION sobre por qué POWERSHELL y no otra cosa

  1. curiosidad. Tengo un problema que sé que se puede resolver por 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 ampliar mi toolbet de resolución de problemas a través de PowerShell. Usar 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 (así es como funciona RSScripter después de todo), creo que será más fácil para nosotros codificar y mantener un script de PowerShell. También me doy cuenta de que una secuencia de comandos de PowerShell probablemente usará el código .NET, pero espero que PowerShell ya pueda tratar los informes como objetos de alguna manera, así no tendré que usar la API de Reporting Services para extraer los archivos.

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

+0

Podrían aclarar qué se entiende por "escritura a cabo"? –

+0

Gracias por los comentarios. He actualizado la pregunta para que quede más clara para los demás. –

Respuesta

4

un poco tarde, pero aquí tienes

Este script PowerShell: 1. Se conecta a su servidor de informes 2. crea la misma estructura de carpetas que tiene en su servidor de informes 3. Descargar todo el Informe de SSRS definición archivos (RDL) en sus respectivas carpetas

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

+0

¡Gracias! Eso es realmente genial. Trabajé en esto escribiendo los contenidos del catálogo, pero esto completa mis necesidades. :) –

+0

No sé por qué, pero esto devuelve una 'Invocación de método fallida porque [SSRS.ReportingService2005.ReportExecutionService] no contiene un método llamado 'ListChildren' para mí. No parece existir un método similar. – user2173353

0

Cualquier cosa que admita .Net puede hacer esto. Vea this Stackoverflow posting 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 informe son un poco más complicados. Debe obtener los informes dependientes (nuevamente, una llamada API) y volver a conectar la fuente de datos si carga un nuevo modelo de informe. De nuevo, no terriblemente extenuante.

Powershell debería hacer esto bien. He hecho varias cosas con IronPython y C#. También hay una herramienta llamada rs.exe que toma un script vb.net, lo encabeza y lo combina con algunos includes y compila y lo ejecuta detrás de las escenas.

+0

Gracias por los comentarios. Estoy buscando una respuesta específica de PowerShell por una variedad de razones. Si PowerShell ya no trata los informes como objetos de alguna manera, entonces probablemente use la API para exportar los informes. –

+0

Powershell puede usar cualquier API .net. La API es la misma ya sea que se use de Powershell o de cualquier otro lenguaje .net. – ConcernedOfTunbridgeWells

4

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

El equipo de SQL Server aún no ha provisto mucho sobre cosas específicas de PowerShell. Principalmente se basan en .NET y T-SQL como "lenguajes de scripting".

+0

Es decepcionante y enviaré una solicitud de mejora en el sitio de Microsoft Connect si esta solicitud no ha sido enviada por otra persona. –

+0

Es una llamada difícil para MS. El equipo SQL ya tiene que admitir 2-3 API; Estoy seguro de que PSH parece uno más. Espero que la comunidad pueda ajustar algunos cmdlets alrededor de las API existentes. Eso estaría bien. –

2

Acabo de darme cuenta de que la columna Contenido en el 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 escribir los resultados en un archivo plano y luego importar el archivo en mi sistema de control de versiones.

Cuestiones relacionadas