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