Può tornare utile, durante una migrazione di SharePoint, avere un idea di quanti siano file siano presenti in una site collection e il loro spazio occupato.
Lo script seguente, in PowerShell, elenca tutti i file presente nella site collection con la relativa dimensione:

PowerShell

# https://www.sgart.it/IT/informatica/elencare-con-powershell-tutti-i-file-presenti-in-una-site-collection-sharepoint/post
# cicla su tutti i siti della site collection per elencare i files presenti
param(
	[Parameter(Mandatory)]
	[string]$spUrl,
	
	[string]$filterUrl = "*"
)
#$spUrl = "http://sharepoint.sgart.local/hd"

Write-Output "Input: $spUrl"
Write-Output "Filter: $filterUrl"
$dtStart = $(Get-Date)
Write-Output "Start: $dtStart"

Add-PSSnapIn Microsoft.SharePoint.PowerShell

# leggo la site collection
$s = Get-SPSite $spUrl
$webs = $s.AllWebs # prendo tutti i webs
$i=0;
$totalSize = 0;

# applico un eventuale filtro sulle url del sito, 
# in questo caso solo quelle che nel path contengono "/hd/"
$filteredWebs = $webs | Where-Object { $_.ServerRelativeUrl -like $filterUrl  }

$filteredWebs | Foreach-Object {  # ciclo su tutti i web
  $w = $_
  $relativeUrl = $w.serverRelativeUrl
  Write-Output "Web: $relativeUrl"
  
  if($relativeUrl -eq "/") {
	$relativeUrl = ""
  }
  
  $w.lists | foreach {
    # ciclo su tutte le liste
    $l = $_
    $listUrl = $l.RootFolder.Url

    # escludo le doc lib di tipo pagine
    $isValid = -not( $listUrl -like "Pages" -or $listUrl -like "Pagine")

    if($isValid -eq $true -and $l.BaseType -eq "1") {
      # se è valida ed è una doc lib
      $relativeListUrl = "$($relativeUrl)/$($listUrl)"
      write-Output "  List: $relativeListUrl"

      $l.items | foreach {
        # ciclo su tutti i file presenti nella doc lib
        $item = $_
        $size = $item.File.length  / 1024  # kB

        # visualizzo la url nell'output
        $relativeItemUrl = "$($relativeUrl)/$($item.Url)"
        Write-Output "    $($relativeItemUrl): $([Math]::Round($size, 2)) kB" 
 
        $totalSize = $totalSize + $size
        $i++
      }
    }
  }
}
$dtEnd = $(Get-Date)
Write-Output "Start: $dtEnd"
Write-Output "END: Items: $i, total size: $([Math]::Round($totalSize / 1024, 2)) MB, Execution time: $($dtEnd -$dtStart)"
L'utente con cui fa girare lo script deve avere accesso a tutti i file, liste e siti, altrimenti alcuni elementi non verranno presi in considerazione. L'ideale è usare un utente con privilegi di site collection administrator.
Attenzione, lo script non prende in considerazione le versioni dei file, quindi lo spazio reale del database potrebbe essere notevolmente superiore.
da esegire come

PowerShell

.\p.ps1 https://sharepoint.sgart.local/hd

.\p.ps1 https://sharepoint.sgart.local/hd "*/doc/*"
L'output sarà simile al seguente:

Text

Input: http://portal-dev.pennymarket.it
Web: /
  List: /Doc_NationalGeographic
    /Doc_NationalGeographic/REGOLAMENTO.pdf: 241.1 kB
  List: /Doc_Raccolta
    /Doc_Campioni/LOCANDINA.jpg: 435.44 kB
    /Doc_Campioni/REGOLAMENTO.pdf: 220.11 kB
  List: /DocCorsi
    /DocCorsi/DsOracle.rds.rsds: 0.46 kB
    /DocCorsi/Report Formazione 1.rdl: 74.69 kB
    /DocCorsi/Report Formazione .rdl: 40.12 kB
...
  List: /hd/_catalogs/wfpub
Start: 02/10/2020 13:07:01
END: Items: 9150, total size: 3449.45 MB, Execution time: 00:00:44.3624282
Tags:
SharePoint498 SharePoint 2010224 SharePoint 2013137 SharePoint 201668
Potrebbe interessarti anche: