簡體   English   中英

使用命令行跨子文件夾刪除多個SSRS報告?

[英]Deleting multiple SSRS reports across subfolders using command line?

我是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 

問題在於如果這些文件夾中的任何一個不存在,腳本將停止。 我正在努力確定解決這個問題的最佳方法。 最好的方法是清空文件夾並將它們留在那里,或找到一種方法來忽略錯誤並繼續?

根據答案,我將如何在此腳本中調用它?

您可以通過運行父文件夾中的項目並查找具有預期名稱的任何子文件夾來檢查文件夾是否存在。 然后,僅當存在時,嘗試刪除該文件夾。

這應該可以解決您的問題,即您只有在知道它存在時才會刪除。

您的代碼可能類似於:

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

這只會檢查/文件夾 - 您可能需要調整以匹配您的設置。

我完成了接受的答案支持:

  • 刪除不在root中的文件夾
  • 僅刪除文件夾的內容
  • 支持2017年SSRS
  • 可以用作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"文件夾。

  1. 刪除cc文件夾的內容:

rs.exe -i DeleteServerReportFolder.rss -s http:// server2 / ReportServer2017 -v vTARGETRSFOLDER = cc -v vTARGETROOT = / bb -v vDeleteContentOnly = true

  1. 完全刪除bb文件夾:

rs.exe -i DeleteServerReportFolder.rss -s http:// server2 / ReportServer2017 -v vTARGETRSFOLDER = bb -v vTARGETROOT = -v vDeleteContentOnly = false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM