PowerShell – download all files in a Document Library

I needed to download the full contents of a Document Library to a local folder.   Explorer View, SharePoint Designer, and WebDAV simply weren’t fast enough for the large number of items needed.  So I wrote a quick script:

PowerShell – SOM (Server Object Model)

$s = Get-SPSite “http://sp2013”
$files = $s.RootWeb.GetFolder("Shared Documents").Files
foreach ($file in $files) {
    Write-host $file.Name
    $b = $file.OpenBinary()
    $fs = New-Object System.IO.FileStream(("d:\temp\"+$file.Name), [System.IO.FileMode]::Create)
    $bw = New-Object System.IO.BinaryWriter($fs)

PowerShell – Remote HTTP (Client Side / Office 365)

# Download all files from a SharePoint Document Library view to the local folder over HTTP remotely.  
# No server side requirement, can run anywhere, including end user desktops.
param (
    $url,       # "http://portal/sites/test",
    $listID,    # "41E5FC8E-D174-4F48-AC3C-79F999A045D1",
    $viewID     # "5E9415B3-3C63-48AD-9DC2-A5A282B61790"
# Current folder
$scriptpath = Split-Path $MyInvocation.MyCommand.Path
# Open file list
Write-Host "Opening $url"
$ows = "$url/_vti_bin/owssvr.dll?Cmd=Display&List={$listID}&View={$viewID}&XMLDATA=TRUE"
$owsList = "$url/_vti_bin/owssvr.dll?Cmd=ExportList&List={$listID}&XMLDATA=TRUE"
$r = Invoke-WebRequest $ows -UseDefaultCredentials
$rList = Invoke-WebRequest $owsList -UseDefaultCredentials
$xml = $r.Content
$xmlList = $rList.Content
$folder = $xmlList.List.Url
# Client
$client = New-Object System.Net.WebClient
$client.UseDefaultCredentials = $true
# Loop and download
foreach ($row in $xml.xml.data.row) {
    $name = $row.ows_LinkFilename
    $from = "$url/$folder/$name"
    $client.DownloadFile($from, "$scriptpath\$name")
Write-Host "DONE"

NOTE – Remote HTTP (Client Side / Office 365) can recurse files from all sub-folders by updating the View to “Show all items (all folders)”


Return to Top ▲Return to Top ▲