Может ли PowerShell скриптировать файлы RDL служб SQL Server Reporting Services?
-
03-07-2019 - |
Вопрос
Можно ли использовать 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, А НЕ ЧТО-ТО ДРУГОЕ
Любопытство.У меня есть проблема, которая, как я знаю, может быть решена одним из двух методов (API или RSScripter), и я хотел бы знать, может ли она быть решена третьим методом.
Возможность расширить мой набор инструментов для решения проблем с помощью PowerShell.Использование PowerShell для решения этой проблемы может послужить основой для изучения того, как использовать PowerShell для решения других проблем, которые я еще не пытался решить.
PowerShell легче понять моей команде и мне самому.В целом, членам моей команды и мне легче понять код PowerShell, чем .СЕТЕВОЙ код.Хотя я знаю, что эту проблему можно решить с помощью некоторых .NET-кода с использованием API (в конце концов, именно так работает RSScripter), я чувствую, что нам будет проще кодировать и поддерживать сценарий PowerShell.Я также понимаю, что, вероятно, будет использоваться скрипт PowerShell .ЧИСТЫЙ код, но я надеюсь, что PowerShell уже сможет каким-то образом обрабатывать отчеты как объекты, поэтому мне не придется использовать API служб Reporting Services для извлечения файлов.
RSScripter пока не поддерживает 2008 год.В прошлом я использовал RSScript для создания сценариев отчетов.К сожалению, похоже, что он пока не поддерживает 2008 год.Это означает, что я должен написать код для API прямо сейчас, поскольку это единственный известный мне способ автоматического извлечения файлов без присмотра.
Решение
немного поздно, но ты уже здесь.
Этот скрипт PowerShell :1.Подключается к вашему серверу отчетов 2.Создает ту же структуру папок, что и на сервере отчетов 3.Загрузите все файлы определения отчета SSRS (RDL) в соответствующие папки
Другие советы
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 скрипт, дополняет его некоторыми включениями, компилирует и запускает его за кулисами.