Когда SharePoint портал разрастается, то бывает необходимо отслеживать наиболее большие сайты, чтобы понимать, что можно вынести в отдельные коллекции сайтов для оптимизации работы портала. Ниже приведен полезный скрипт, который считает размер сайта SharePoint и его подсайтов. Для быстрорастущих сайтов можно настроить на ежедневный запуск, чтоб не упустить момент.
<# Script for calculating SharePoint SPWeb size #> if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) { Write-Host "Подключение надстроек SharePoint" Add-PSSnapin Microsoft.SharePoint.PowerShell } function GetWebSizes ($StartWeb) { $web = Get-SPWeb $StartWeb [long]$total = 0 $total += GetWebSize -Web $web $total += GetSubWebSizes -Web $web $totalInMb = ($total/1024)/1024 $totalInMb = "{0:N2}" -f $totalInMb $totalInGb = (($total/1024)/1024)/1024 $totalInGb = "{0:N2}" -f $totalInGb write-host "Total size of all sites below" $StartWeb "is" $total "Bytes," write-host "which is" $totalInMb "MB or" $totalInGb "GB" $web.Dispose() } function GetWebSize ($Web) { [long]$subtotal = 0 foreach ($folder in $Web.Folders) { $subtotal += GetFolderSize -Folder $folder } write-host "Site" $Web.Title "is" $subtotal "KB" return $subtotal } function GetSubWebSizes ($Web) { [long]$subtotal = 0 foreach ($subweb in $Web.GetSubwebsForCurrentUser()) { [long]$webtotal = 0 foreach ($folder in $subweb.Folders) { $webtotal += GetFolderSize -Folder $folder } write-host "Site" $subweb.Title "is" $webtotal "Bytes" $subtotal += $webtotal $subtotal += GetSubWebSizes -Web $subweb } return $subtotal } function GetFolderSize ($Folder) { [long]$folderSize = 0 foreach ($file in $Folder.Files) { $folderSize += $file.Length; } foreach ($fd in $Folder.SubFolders) { $folderSize += GetFolderSize -Folder $fd } return $folderSize } GetWebSizes -StartWeb http://sp10/mysite/