Как создать папки SSRS 2012 с помощью сценария powershell
Мы пытаемся автоматизировать миграцию отчетов SQL-сервера с нескольких медленных серверов на один гораздо более быстрый сервер. Нам нужно перемещать наших клиентов по одному. У нас есть скрипт, который экспортирует все отчеты, источники данных и структуру папок.
нам удалось изменить сценарии, чтобы воссоздать все источники данных и файлы отчетов, если структура папок установлена. Мы взяли эту статью за основу
чего мы не можем достичь, так это автоматически воссоздать структуру папок.
У нас есть скрипт, который создает список папок так:
\client_live
\client_live\AccountTransaction
\client_live\BudgetApproval
\client_live\Custom
\client_live\NominalReporting
\client_live\OnlineReports
\client_live\Product
\client_live\Sales
\client_live\Stock
\client_live\Stock\updates
\client_live\Stock\backorder
\client_live\Suppliers
\client_live\TransactionReporting
\client_live\Transactions
Мы можем поменять местами \ to / и используя разделы пути разделения пути каждой папки.
У каждого клиента разные пути к папкам, а количество подпапок у каждого клиента разное.
Мы знаем, что нам нужно создать папку client_live, затем ее подпапки и так далее.
Вопрос в том, как пройтись по списку, который у нас есть, и передать соответствующие детали в этот раздел кода, заменив жестко закодированные записи для "NewFolder" и "/" соответствующими значениями из списка.
$type = $Proxy.GetType().Namespace
$datatype = ($type + '.Property')
$property =New-Object ($datatype);
$property.Name = “NewFolder”
$property.Value = “NewFolder”
$numproperties = 1
$properties = New-Object ($datatype + '[]')$numproperties
$properties[0] = $property;
$newFolder = $proxy.CreateFolder(“NewFolder”, “/”, $properties)
Это то, что мы используем для создания нашего списка.
# script to create folders in SQL 2012 RS
#
# taken from http://sqlblogcasts.com/blogs/sqlandthelike/archive/2013/02/12/deploying-ssrs-artefacts-using-powershell-simply.aspx
# and amended.
# Connect to SSRS Webservice - assume we are on the server used.
$ReportServerUri = "http://localhost/ReportServer//ReportService2010.asmx?wsdl"
$global:proxy = New-WebServiceProxy -Uri $ReportServerUri -UseDefaultCredential ;
# amend the following line to point to your files.
$source = "C:\import\Lime"
$cut=$source.length
$result=gci -r $source | ?{ $_.PSIsContainer } | % { $_.FullName }
foreach ($item in $result)
{
# first input to to have correct data source.
$list=$item.substring($cut)
# echo out just to validate what we have so far.
echo $list
}
Все наши навыки PowerShell самообучены, поэтому прошу прощения за любые грубости в нашем коде.
С уважением
спенсер
1 ответ
Вам нужно создать рекурсивную функцию для обхода структуры папок. У вас есть вызовы API, чтобы получить свойства для элементов в ssrs, чтобы вы могли использовать их в функции, аналогичной:
function RecurseSSRSDirectory ([string]$directory){
$items = <--Function to get assets in $directory
foreach ($item in $items) {
if ($item type is report) {
//do something with report
}
elseif ($item type is dataset) {
//do something with dataset
}elseif ($item type is folder) {
//Create folder here
Recurse $item.Path
}
}
}