Как создать папки SSRS 2012 с помощью скрипта powershell

Мы пытаемся автоматизировать перенос отчетов сервера SQL с нескольких медленных серверов на один гораздо более быстрый сервер. Нам нужно перемещать наших клиентов по одному. У нас есть скрипт, который экспортирует все отчеты, источники данных и структуру папок.

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

http://sqlblogcasts.com/blogs/sqlandthelike/archive/2013/02/12/deploying-ssrs-artefacts-using-powershell-simply.aspx

чего мы не можем добиться, так это автоматического воссоздания структуры папок.

Сценарий, который у нас есть, создает список папок следующим образом:

\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

Мы можем поменять местами \ на / и, используя разделенный путь, собрать разделы каждого пути к папке.

У каждого клиента разные пути к папкам, и количество подпапок зависит от клиента.

Мы знаем, что нам нужно создать папку 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 мы научились сами, поэтому, пожалуйста, извините любые неточности в нашем коде.

С Уважением

Спенсер


person user3447121    schedule 21.03.2014    source источник


Ответы (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
        }

    }
}
person Ross Bush    schedule 22.03.2014