Domanda

È possibile utilizzare PowerShell per eseguire lo script dei file rdl di SQL Server Reporting Services in SQL Server 2008? In tal caso, qualcuno può fornire un esempio di codice per farlo? Questo sarebbe un utile sostituto per l'uso di uno strumento di terze parti per eseguire lo scripting di file RDL creati da utenti aziendali al di fuori del mio dipartimento di Business Intelligence.

CHIARIMENTO DEL TERMINE " SCRIPT OUT "

Per " script out " ;, voglio dire che vorrei generare automaticamente il file RDL sottostante per ogni rapporto sul server. Ad esempio, quando si codifica un report in BIDS, si sta generando un file RDL. Quando si distribuisce il file sul server, il file viene in qualche modo importato nel database ReportServer di SQL Server e non è più un file RDL fisico separato. Vorrei estrarre tutti i report dal server in un formato file RDL.

Ho usato lo strumento RSScripter per estrarre i report come file RDL, quindi so che è possibile utilizzare strumenti diversi da PowerShell. Vorrei specificamente sapere se è possibile farlo utilizzando PowerShell e, in tal caso, ottenere un campione del codice per farlo.

CHIARIMENTO SU PERCHE 'VOGLIO GENERARE VERSIONI RDL DI RAPPORTI

Perché è importante " scrivere script " i rapporti ai file RDL? Vorrei fare il check-in dei file RDL nel mio sistema di controllo del codice sorgente una volta a notte per tenere traccia di tutti i report creati dagli utenti al di fuori del mio dipartimento di Business Intelligence. Tengo già traccia di tutti i report generati dal mio dipartimento da quando abbiamo sviluppato i nostri report in BIDS, ma non riesco a tenere traccia della cronologia delle versioni sui report creati nello strumento Generatore di report online.

CHIARIMENTI PERCHÉ POWERSHELL E NON QUALCOSA ALTRO

  1. Curiosità. Ho un problema che so può essere risolto con uno dei due metodi (API o RSSCripter) e vorrei sapere se può essere risolto con un terzo metodo.

  2. Opportunità di espandere il mio toolbet di risoluzione dei problemi tramite PowerShell. L'uso di PowerShell per risolvere questo problema può fornire le basi per imparare a utilizzare PowerShell per risolvere altri problemi che non ho ancora provato a risolvere.

  3. PowerShell è più facile da capire per me e il mio team. In generale, i membri del mio team e io possiamo comprendere il codice PowerShell più facilmente del codice .NET. Anche se so che questo problema può essere risolto con un po 'di codice .NET usando l'API (è così che funziona RSScripter dopo tutto), penso che sarà più facile per noi codificare e mantenere uno script PowerShell. Mi rendo anche conto che uno script di PowerShell utilizzerà probabilmente il codice .NET, ma spero che PowerShell sia già in grado di trattare i report come oggetti in qualche modo, quindi non dovrò usare l'API di Reporting Services per estrarre i file.

  4. RSScripter non supporta ancora il 2008. In passato, ho usato RSScript per scrivere i report. Sfortunatamente, non sembra ancora supportare il 2008. Ciò significa che devo scrivere codice sull'API in questo momento poiché è l'unico modo in cui presento sapere come estrarre i file in modo automatico e non presidiato.

È stato utile?

Soluzione

un po 'in ritardo, ma ecco qui

Questo script di PowerShell: 1. Si collega al server di report 2. Crea la stessa struttura di cartelle presente nel server di report 3. Scarica tutti i file RDRS (SSRS Report Definition) nelle rispettive cartelle

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

Altri suggerimenti

PowerShell non fornisce alcuna funzionalità nativa, simile a PowerShell per questo, no. È possibile farlo in PowerShell (come indicato nella risposta precedente) solo perché PowerShell può accedere alle classi Framework sottostanti. Come hai notato nel tuo commento alla risposta precedente, non è diverso dall'uso dell'API in C # o VB.

Il team di SQL Server non ha ancora fornito molto in termini di elementi specifici di PowerShell. Si basano principalmente su .NET e T-SQL come "linguaggi di scripting". & Quot;

Ho appena realizzato che la colonna Contenuto in ReportServer.dbo.Catalog contiene la definizione in un formato immagine. Ho scritto il seguente codice per convertirlo in testo leggibile:

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

Con il codice sopra, ora posso automatizzare la scrittura dei risultati in un file flat e quindi importare il file nel mio sistema di controllo della versione.

Tutto ciò che supporta .Net può farlo. Vedi questa pubblicazione Stackoverflow per alcuni collegamenti ai documenti API. Il processo è in realtà abbastanza semplice: l'API ha una chiamata per caricare o scaricare il file .rdl.

I modelli di report sono un po 'più complicati. È necessario ottenere i report dipendenti (di nuovo una chiamata API) e riconnettere l'origine dati se si carica un nuovo modello di report. Ancora una volta, non terribilmente faticoso.

Powershell dovrebbe fare questo bene. L'ho fatto variamente con IronPython e C #. C'è anche uno strumento chiamato rs.exe che prende uno script vb.net, lo inserisce e lo inserisce con alcune inclusioni e compilazioni e lo esegue dietro le quinte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top