
[SPS] Extract all of the documents and their versions from a site using PS
So here is a way to do it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# This script will extract all of the documents and their versions from a site. It will also # download all of the list data and document library metadata as a CSV file. Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue # # $destination: Where the files will be downloaded to # $webUrl: The URL of the website containing the document library for download # $listUrl: The URL of the document library to download #Where to Download the files to. Sub-folders will be created for the documents and lists, respectively. $destination = "C:\Export" #The site to extract from. Make sure there is no trailing slash. $site = "http://2013.pbnet.pbnet.local" $listTitle = "My Test Doclib" # Function: HTTPDownloadFile # Description: Downloads a file using webclient # Variables # $ServerFileLocation: Where the source file is located on the web # $DownloadPath: The destination to download to function HTTPDownloadFile($ServerFileLocation, $DownloadPath) { $webclient = New-Object System.Net.WebClient $webClient.UseDefaultCredentials = $true $webclient.DownloadFile($ServerFileLocation,$DownloadPath) } function DownloadMetadata($sourceweb, $metadatadestination) { Write-Host "Creating Lists and Metadata" $sourceSPweb = Get-SPWeb -Identity $sourceweb $metadataFolder = $destination+"\"+$sourceSPweb.Title+" Lists and Metadata" $createMetaDataFolder = New-Item $metadataFolder -type directory $metadatadestination = $metadataFolder foreach($list in $sourceSPweb.Lists) { Write-Host "Exporting List MetaData: " $list.Title $ListItems = $list.Items $Listlocation = $metadatadestination+"\"+$list.Title+".csv" $ListItems | Select * | Export-Csv $Listlocation -Force } } # Function: GetFileVersions # Description: Downloads all versions of every file in a document library # Variables # $WebURL: The URL of the website that contains the document library # $DocLibURL: The location of the document Library in the site # $DownloadLocation: The path to download the files to function GetFileVersions($file) { foreach($version in $file.Versions) { #Add version label to file in format: [Filename]_v[version#].[extension] $filesplit = $file.Name.split(".") $fullname = $filesplit[0] $fileext = $filesplit[1] $FullFileName = $fullname+"_v"+$version.VersionLabel+"."+$fileext #Can't create an SPFile object from historical versions, but CAN download via HTTP #Create the full File URL using the Website URL and version's URL $fileURL = $webUrl+"/"+$version.Url #Full Download path including filename $DownloadPath = $destinationfolder+"\"+$FullFileName #Download the file from the version's URL, download to the $DownloadPath location HTTPDownloadFile "$fileURL" "$DownloadPath" } } # Function: DownloadDocLib # Description: Downloads a document library's files; called GetGileVersions to download versions. # Credit # Used Varun Malhotra's script to download a document library # as a starting point: http://blogs.msdn.com/b/varun_malhotra/archive/2012/02/13/10265370.aspx # Variables # $folderUrl: The Document Library to Download # $DownloadPath: The destination to download to function DownloadDocLib($folderUrl) { $folder = $web.GetFolder($folderUrl) foreach ($file in $folder.Files) { #Ensure destination directory $destinationfolder = $destination + "\" + $folder.Url if (!(Test-Path -path $destinationfolder)) { $dest = New-Item $destinationfolder -type directory } #Download file $binary = $file.OpenBinary() $stream = New-Object System.IO.FileStream($destinationfolder + "\" + $file.Name), Create $writer = New-Object System.IO.BinaryWriter($stream) $writer.write($binary) $writer.Close() #Download file versions. If you don't need versions, comment the line below. GetFileVersions $file } } # Function: DownloadSite # Description: Calls DownloadDocLib recursiveley to download all document libraries in a site. # Variables # $webUrl: The URL of the site to download all document libraries function DownloadSite($webUrl) { $web = Get-SPWeb -Identity $webUrl #Create a folder using the site's name $siteFolder = $destination + "\" +$web.Title+" Documents" $createSiteFolder = New-Item $siteFolder -type directory $destination = $siteFolder foreach($list in $web.Lists) { if($list.BaseType -eq "DocumentLibrary" -and $list.Title -eq $listTitle) { Write-Host "Downloading Document Library: " $list.Title $listUrl = $web.Url +"/"+ $list.RootFolder.Url #Download root files DownloadDocLib $list.RootFolder.Url #Download files in folders foreach ($folder in $list.Folders) { DownloadDocLib $folder.Url } } } } #Download Site Documents + Versions DownloadSite "$site" #Download Site Lists and Document Library Metadata DownloadMetadata $site $destination |