SharePoint 生產環境文件歸檔

  前言git

  最近,用戶提出數據庫大小太大,因此,但願把文件歸檔。至於歸檔,該怎麼作呢?github

  正文web

  咱們提出的解決方案,佔用數據庫最主要的就是各類文檔,那就按照時間爲限制,超過一年的文檔所有備份,由用戶的IT自行保存到他們的存儲中。數據庫

  還好用戶的數據規模不是特別的大,咱們使用程序來處理也不會特別的耗時。運維

  •   文檔庫

  關於文檔庫處理起來比較容易,咱們只須要用Windows 資源管理器視圖,把文檔先拷貝下來進行備份,而後再進行刪除就能夠了。oop

  •   列表

  列表處理起來,仍是比較有難度的,咱們須要把全部項目的列表附件都備份,而後進行刪除。url

  咱們這裏講的就是如何批量備份,至於刪除,只須要稍稍改一下下面的腳本,就能夠了。spa

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

#SharePoint variables
$SiteUrl = "http://siteurl"
$WebUrl = "weburl"
$LibraryName = "listname"

#Save Path
$SavePath = "C:\ListBackup20200227"

#Get SPSite
$site= New-Object Microsoft.SharePoint.SPSite($SiteUrl)

#Get SPWeb
$Web = $site.OpenWeb($WebUrl)

#Get SPList
$List = $Web.Lists[$LibraryName]

#Loop SPListItem. If SPFolder, skip the item
foreach ($ListItem in $List.Items){
    #Set SavePath
    $SaveFolder = $SavePath + "\" + $ListItem.ID 

    #Check if SavePath exists already. If not, create SavePath
    if (!(Test-Path -path $SaveFolder)){   
        New-Item $SaveFolder -type directory
    }

    #Get all SPAttachment
    $AttachmentsColl = $ListItem.Attachments

    #Loop all SPAttachment
    foreach ($Attachment in $AttachmentsColl){
        #Get attachment
        $file = $web.GetFile($listItem.Attachments.UrlPrefix + $Attachment)
        $bytes = $file.OpenBinary()

        #Save attachment
        $FilePath = $SaveFolder + " \" + $Attachment
        $fs = new-object System.IO.FileStream($FilePath, "OpenOrCreate")
        $fs.Write($bytes, 0 , $bytes.Length)
        $fs.Close()
    }
}

  WHY PowerShell命令行

  對於業務並不複雜可是要求代碼效率的操做,咱們都傾向於使用SharePoint PowerShell 來進行操做,尤爲是對於文檔備份這樣更像是IT運維的操做,咱們更加推薦命令行。code

  這樣的操做有什麼優勢呢?

  1.   操做簡單明瞭,不須要進行太多的代碼開發,沒有複雜的業務;
  2.   咱們保存下來,能夠屢次使用,好比這個備份,很是的靈活,修改也不須要從新編譯;
  3.   相似CMD命令的方式,更容易讓IT人員和非SharePoint 開發接受。

  PowerShell 文件下載:https://github.com/linyus/BackupSPAttachment

相關文章
相關標籤/搜索