前言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
這樣的操做有什麼優勢呢?
PowerShell 文件下載:https://github.com/linyus/BackupSPAttachment