Reference : http://www.nikcraik.ca/sharepoint-powershell-script-to-extract-all-documents-and-their-versions/
# 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://win-2016/"
$docName ="Documents";
# 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)
{
if($list.Title -eq $docName) #remove this
condition you can get all Site Document and list metadata
{
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")
{
if($list.Title -eq $docName) #remove this
condition you can get all Site Document and list
{
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
No comments:
Post a Comment