Может ли PowerShell скриптировать файлы RDL служб SQL Server Reporting Services?

StackOverflow https://stackoverflow.com/questions/409507

Вопрос

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

РАЗЪЯСНЕНИЕ ТЕРМИНА "ВЫВОД СЦЕНАРИЯ"

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

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

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

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

РАЗЪЯСНЕНИЕ, ПОЧЕМУ ИМЕННО POWERSHELL, А НЕ ЧТО-ТО ДРУГОЕ

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

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

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

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

Это было полезно?

Решение

немного поздно, но ты уже здесь.

Этот скрипт 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/

Другие советы

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

Команда SQL Server пока мало что предоставила в отношении материалов, специфичных для PowerShell.Они в основном полагаются на .NET и T-SQL как на "языки сценариев".

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top