Может ли PowerShell создавать сценарии RDL-файлов служб отчетов SQL Server? - PullRequest
6 голосов
/ 03 января 2009

Можно ли использовать PowerShell для создания сценариев rdl-файлов служб отчетов SQL Server в SQL Server 2008? Если да, может ли кто-нибудь предоставить пример кода для этого? Это было бы полезной заменой использования стороннего инструмента для создания сценариев RDL-файлов, созданных бизнес-пользователями вне моего отдела бизнес-аналитики.

УТОЧНЕНИЕ СРОКА "СЦЕНАРИЙ"

Под "script out" я имею в виду, что я хотел бы автоматически генерировать основной файл RDL для каждого отчета на сервере. Например, когда вы кодируете отчет в BIDS, вы генерируете файл RDL. При развертывании файла на сервере файл каким-то образом импортируется в базу данных SQL Server ReportServer и больше не является отдельным физическим файлом RDL. Я хотел бы извлечь все отчеты с сервера в формате файла RDL.

Я использовал инструмент RSScripter для извлечения отчетов в виде файлов RDL, поэтому я знаю, что это возможно с помощью инструментов, отличных от PowerShell. Мне бы особенно хотелось узнать, возможно ли это сделать с помощью PowerShell, и, если это так, получить образец кода для этого.

УТОЧНЕНИЕ ПОЧЕМУ Я ХОЧУ СОЗДАТЬ ВЕРСИИ ОТЧЕТОВ RDL

Почему важно «записывать» отчеты в файлы RDL? Я хотел бы регистрировать файлы RDL в моей системе контроля версий раз в ночь, чтобы отслеживать все отчеты, созданные пользователями за пределами моего отдела бизнес-аналитики. Я уже отслеживаю все отчеты, сгенерированные моим отделом, с тех пор, как мы разрабатываем наши отчеты в BIDS, но я не могу отслеживать историю версий отчетов, созданных в онлайн-средстве построителя отчетов.

УТОЧНЕНИЕ ПОЧЕМУ МОЩНОСТИ И НЕ ЧТО-ТО, ЧТО-ТО

  1. Любопытство. У меня есть проблема, которую, я знаю, можно решить одним из двух методов (API или RSSCripter), и я хотел бы знать, может ли она быть решена третьим методом.

  2. Возможность расширить набор инструментов для решения проблем с помощью PowerShell. Использование PowerShell для решения этой проблемы может послужить основой для изучения того, как использовать PowerShell для решения других проблем, которые я еще не пытался решить.

  3. PowerShell легче понять для меня и моей команды. В общем, члены моей команды и я можем понять код PowerShell легче, чем код .NET. Хотя я знаю, что эту проблему можно решить с помощью некоторого кода .NET с помощью API (в конце концов, именно так работает RSScripter), я чувствую, что нам будет проще кодировать и поддерживать скрипт PowerShell. Я также понимаю, что сценарий PowerShell, вероятно, будет использовать код .NET, но я надеюсь, что PowerShell уже сможет обрабатывать отчеты как объекты, поэтому мне не придется использовать API служб Reporting Services для извлечения файлов.

  4. RSScripter пока не поддерживает 2008. В прошлом я использовал RSScript для составления отчетов. К сожалению, пока не поддерживается 2008. Это означает, что я должен написать код для API прямо сейчас, так как это единственный способ, которым я представляю, как извлечь файлы автоматически без присмотра.

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

немного поздно, но здесь вы идете

Этот скрипт PowerShell: 1. Подключается к вашему серверу отчетов 2. Создает ту же структуру папок, что и на вашем сервере отчетов. 3. Загрузите все файлы определения отчетов SSRS (RDL) в соответствующие папки

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

4 голосов
/ 03 января 2009

PowerShell не предоставляет никаких собственных функций PowerShell-esque для этого, нет. Вы можете сделать это в PowerShell (как отмечено в предыдущем ответе) только потому, что PowerShell может получить доступ к базовым классам Framework. Как вы отметили в своем комментарии к предыдущему ответу, он ничем не отличается от использования API в C # или VB.

Команда SQL Server еще не предоставила много возможностей для PowerShell. В первую очередь они полагаются на .NET и T-SQL как на «языки сценариев».

2 голосов
/ 08 июля 2010

Я только что понял, что столбец Content в ReportServer.dbo.Catalog содержит определение в формате Image. Я написал следующий код для преобразования его в читаемый текст:

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

С помощью приведенного выше кода я теперь могу автоматизировать запись результатов в плоский файл и затем импортировать файл в мою систему контроля версий.

0 голосов
/ 03 января 2009

Все, что поддерживает .Net, может сделать это. См. эту публикацию Stackoverflow для некоторых ссылок на документы API. Процесс на самом деле довольно прост - у API есть вызов, чтобы загрузить или загрузить файл .rdl.

Модели отчетов немного сложнее. Вы должны получить зависимые отчеты (снова вызов API) и повторно подключить источник данных, если вы загрузите новую модель отчета. Опять же, не очень напряженно.

Powershell должен делать это нормально. Я по-разному делал это с IronPython и C #. Есть также инструмент под названием rs.exe, который берет скрипт vb.net, дополняет и добавляет его к некоторым файлам, компилирует и запускает его за сценой.

...