前言
最近,用戶提出資料庫大小太大,所以,希望把檔案歸檔,至于歸檔,該怎么做呢?
正文
我們提出的解決方案,占用資料庫最主要的就是各種檔案,那就按照時間為限制,超過一年的檔案全部備份,由用戶的IT自行保存到他們的存盤中,
還好用戶的資料規模不是特別的大,我們使用程式來處理也不會特別的耗時,
- 檔案庫
關于檔案庫處理起來比較容易,我們只需要用Windows 資源管理器視圖,把檔案先拷貝下來進行備份,然后再進行洗掉就可以了,
- 串列
串列處理起來,還是比較有難度的,我們需要把所有專案的串列附件都備份,然后進行洗掉,
我們這里講的就是如何批量備份,至于洗掉,只需要稍稍改一下下面的腳本,就可以了,
[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運維的操作,我們更加推薦命令列,
這樣的操作有什么優點呢?
- 操作簡單明了,不需要進行太多的代碼開發,沒有復雜的業務;
- 我們保存下來,可以多次使用,比如這個備份,非常的靈活,修改也不需要重新編譯;
- 類似CMD命令的方式,更容易讓IT人員和非SharePoint 開發接受,
PowerShell 檔案下載:https://github.com/linyus/BackupSPAttachment
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/2335.html
標籤:SharePoint
