Удалить несколько отчетов SSRS из подпапок с помощью командной строки?
Я новичок в развертывании SSRS, и я искал вокруг, но не могу найти точный сценарий, который применим к моей ситуации. У меня есть несколько отчетов, развернутых в разных подпапках в SSRS 2012. Например:
- Продажи /salesReport1
- Продажи /salesReport2
- Финансы /finReport1
- Финансы /finReport2
- Разное /miscReport1
- Разное /miscReport2
Из-за того, что иногда SSRS не нравится перезаписанный файл отчета, я хотел бы удалить все файлы отчетов в экземпляре перед развертыванием любых новых отчетов. Я могу успешно удалить папки и их содержимое, вызвав этот скрипт с помощью rs.exe:
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim bh As New BatchHeader()
bh.BatchID = rs.CreateBatch()
rs.BatchHeaderValue = bh
'Delete all reports from Main Folder and sub folders.Note:The Folders will be deleted also.
'If do not want to delete the folder, we could use rs.CreateFolder(“Folder name”, “/Main Folder”, “nothing”) to create a new one with nothing.
rs.DeleteItem("/Sales")
rs.DeleteItem("/Finance")
rs.DeleteItem("/Misc")
'Delete all reports from a sub folder, and delete the sub folder
'rs.DeleteItem("/Main Folder/Sub Folder ")
rs.BatchHeaderValue = bh
' Delete folders using batch header.
Try
rs.ExecuteBatch()
Console.WriteLine("Folders deleted successfully.")
Catch e As SoapException
Console.WriteLine(e.Detail.InnerXml.ToString())
Finally
rs.BatchHeaderValue = Nothing
End Try
End Sub 'Main
Проблема заключается в том, что если какая-либо из этих папок не существует, сценарий остановится. Я пытаюсь определить лучший способ справиться с этим. Будет ли лучший способ очистить папки и оставить их там, или найти способ игнорировать ошибки и продолжить?
В зависимости от ответа, как бы я вызвал это в этом сценарии?
1 ответ
Вы можете проверить, существует ли папка, запустив элементы в родительской папке и найдя дочерние папки с ожидаемым именем. Тогда, только если это существует, попробуйте удалить папку.
Это должно решить вашу проблему, т.е. вы удалите ее только тогда, когда знаете, что она существует.
Ваш код может выглядеть примерно так:
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
DeleteFolder("Sales")
DeleteFolder("Finance")
End Sub
Public Sub DeleteFolder(ByVal folderName As String)
Dim items() as CatalogItem
Dim item As CatalogItem
Dim folderExists As Boolean = False
items = rs.ListChildren("/", False)
For Each item In items
If item.TypeName = "Folder" And item.Name.Equals(folderName)
folderExists = True
End If
Next
If folderExists
Try
rs.DeleteItem("/" + folderName)
Console.WriteLine("Deleted folder {0}", folderName)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
Else
Console.WriteLine("Folder {0} does not exist", folderName)
End If
End Sub
Это проверяет /
только папка - возможно, вам придется настроить в соответствии с вашими настройками.
Я выполнил принятый ответ для поддержки:
- Удаление папки, которая не находится в корне
- Удаление содержимого только папки
- Поддержка SSRS 2017
- Может использоваться как файл rss для использования в инструменте rs.exe
Так что код будет:
Dim TargetRSFolder As String = vTARGETRSFOLDER
Dim TargetRSRoot As String = vTARGETROOT
Dim DeleteContentOnly As Boolean = vDeleteContentOnly
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
DeleteFolder(TargetRSFolder)
End Sub
Public Sub DeleteFolder(ByVal folderName As String)
Dim items() as CatalogItem
Dim item As CatalogItem
Dim folderExists As Boolean = False
Dim path As String = TargetRSRoot
IF (path = "")
path = "/"
END IF
items = rs.ListChildren(path, False)
For Each item In items
If item.Type.ToString() = "Folder" And item.Name.ToLower() = folderName.ToLower()
folderExists = True
End If
Next
If folderExists
Try
IF (DeleteContentOnly = True)
items = rs.ListChildren(TargetRSRoot + "/" + folderName, False)
For Each item In items
rs.DeleteItem(item.Path)
Next
Console.WriteLine("Deleted folder's contetnts : {0}", folderName)
ELSE
rs.DeleteItem(TargetRSRoot + "/" + folderName)
Console.WriteLine("Deleted folder :{0}", folderName)
END IF
Catch e As Exception
Console.WriteLine(e.Message)
End Try
Else
Console.WriteLine("Folder {0} does not exist", folderName)
End If
End Sub
Предположим, у нас есть вышеуказанные коды в DeleteServerReportFolder.rss
файл, и мы имеем "/bb/cc"
папка.
- удалить
cc
только содержимое папки:
rs.exe -i DeleteServerReportFolder.rss -s http://server2/ReportServer2017 -v vTARGETRSFOLDER = cc -v vTARGETROOT = / bb -v vDeleteContentOnly = true
- Удалить
bb
папка полностью:
rs.exe -i DeleteServerReportFolder.rss -s http://server2/ReportServer2017 -v vTARGETRSFOLDER = bb -v vTARGETROOT = -v vDeleteContentOnly = false