SharePoint

Download alle documenten binnen je site collectie

12 november 2014

Er werd me gevraagd een script te schrijven dat alle documenten uit een site collectie download en opslaat op de harde schijf.

Met het onderstaande PowerShell script kun je de documenten downloaden:

[sourcecode language=”c-sharp”]
param
(
[Parameter(Mandatory=$true)]
[ValidateScript({asnp *sh* -EA SilentlyContinue;if (Get-SPSite $_){$true}else{Throw “Site collection $_ does not exist”}})]
[string]$SiteCollection,
[Parameter(Mandatory=$true)]
[ValidateScript(
{
if (Test-Path $_)
{$true}
else{
$d = $_
$title = “Create Folder?”;
$message = “$_ doesn’t exist, do you want the script to create it?”;
$yes = New-Object System.Management.Automation.Host.ChoiceDescription “&Yes”, “Creates directory $_”;
$no = New-Object System.Management.Automation.Host.ChoiceDescription “&No”, “Exits script”;
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no);
$result = $host.ui.PromptForChoice($title,$message,$options,0);
switch($result)
{
0 {New-Item $d -Type Directory;$true}
1 {Throw “Please create the folder before running the script again. `nExiting script”}
}
}
})]
[string]$Destination
)

##### Script by Nico Martens #####

Asnp *sh* -EA SilentlyContinue

Start-SPAssignment -global

function Get-SPWebs($SiteCollection){
$SiteCollection = Get-SPSite $SiteCollection
$webs = @()
$SiteCollection.allwebs | %{$webs += $_.url}
return $webs
}

function Get-SPFolders($webs)
{
foreach($web in $webs)
{
$web = Get-SPWeb $web
Write-Host $web.url

$lists = $web.lists | ?{$_.itemcount -ge “1” -And $_.Hidden -eq $false} #Excludes all hidden libraries and empty libraries
#$lists = $web.lists | ?{$_.title -eq “Documents” -and $_.itemcount -ge “1” -And $_.BaseType -eq “DocumentLibrary”} #Change any identifier here
foreach($list in $lists)
{
Write-Host $list.RootFolder.url

#Download files in root folder
$rootfolder = $web.GetFolder($list.RootFolder.Url)
Download-SPContent($rootfolder)

#Download files in subfolders
foreach($folder in $list.folders)
{
$folder = $web.GetFolder($folder.url)
Download-SPContent($folder)

}
}
$web.dispose()
}
}

function Download-SPContent($folder)
{
foreach($file in $folder.Files)
{
$binary = $file.OpenBinary()
$stream = New-Object System.IO.FileStream($destination + “/” + $file.Name), Create
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$stream.Close()
$writer.Close()
}
}

$webs = Get-SPWebs -SiteCollection $Sitecollection
Get-SPFolders -Webs $webs

Stop-SPAssignment -global

[/sourcecode]

Sla dit script op als Get-SPContent.ps1

Je kunt het script op de volgende manier aanroepen:

[sourcecode language=”c-sharp”]
Get-SPContent.ps1 -SiteCollection “” -Destination “
[/sourcecode]

Als het pad nog niet bestaat, wordt je gevraagd of het script het pad moet aanmaken. Er wordt ook een check gedaan of de site collectie die is opgegeven bestaat.

spcnl_download_documenten12-11-2014

 

 

 

De console laat zien van welke libraries de documenten gedownload zijn.

Geavanceerde opties

In sommige scenario’s voldoet dit script niet helemaal. Daarom is er een regel die eenvoudig kan worden aangepast zodat alleen naar bepaalde bibliotheken of bibliotheek types wordt gezocht.

[sourcecode language=”c-sharp”]
$lists = $web.lists | ?{$_.itemcount -ge “1” -And $_.Hidden -eq $false -And $_.BaseType -eq “DocumentLibrary”} #Excludes all hidden libraries and empty libraries
[/sourcecode]

You Might Also Like

1 reactie

  • avatar
    Reply Download alle documenten uit een SharePoint-sitecollectie | Twan van Elk 19 december 2014 at 12:58

    […] Download alle documenten uit een SharePoint-sitecollectie […]

  • Plaats een reactie