Größe eines Web berechnen

Hat schon einmal jemand versucht die größe eines Web zu berechnen? Für Sites kann man ja einfach das folgende Statement verwenden:

Get-SPSite | select url, @{label="Size in MB";Expression={$_.usage.storage/1MB}}
view raw Get-SPwebSize-1.ps1 hosted with ❤ by GitHub

Bei Webs scheint das ganze etwas komplizierter.
Ich habe mal das folgende Skript verwendet um eine Näherung zu erreichen – ich hoffe ich habe nichts großes “vergessen”:

<#
.SYNOPSIS
Measures the size of an SPWeb - be warned that this is only an estimate,
as SharePoint has no OOTB function to measure the size of an web.
.PARAMETER Web
the web to measure
.PARAMETER HumanReadable
whether the output should be human-readable (KB, MB, GB, TB)
.EXAMPLE
Get-SPWeb path/to/web | Get-SPWebSize -HumanReadable GB
#>
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, ValueFromPipeline=$True, HelpMessage = "the SPWeb to measure")]
[Microsoft.SharePoint.SPWeb]$Web,
[Parameter(Mandatory=$false, HelpMessage = "set to a size to measure in (e.g. KB or GB)")]
[ValidateSet("None", "KB", "MB", "GB", "TB")]
[string]$HumanReadable = "None",
[Parameter(Mandatory=$false, HelpMessage = "Suppress the startup-warning")]
[Switch]$SuppressWarn = $false
)
if(-not $SuppressWarn) {
Write-Warning "Be aware, that the calculated size is only an estimate!";
}
if((Get-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null) {
Add-PSSnapin Microsoft.SharePoint.PowerShell
}
function Get-FolderSize {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, ValueFromPipeline=$True)]
[Microsoft.SharePoint.SPFolder]$Folder
)
[long]$size = 0;
$Folder.Files | %{
$size += $_.Length;
}
$Folder.SubFolders | %{
$size += $_ | Get-FolderSize
}
Write-Verbose "Folder $($Folder.ParentWeb.Url +"/"+ $Folder.Url) has size of $size";
$size
}
function Get-SubWebSize {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, ValueFromPipeline=$True)]
[Microsoft.SharePoint.SPWeb]$Web
)
[long]$size = 0;
$Web.Folders | %{
$size += $_ | Get-FolderSize
}
$Web.Webs | %{
$size += $_ | Get-SubWebSize
}
Write-Verbose "Web $($Web.Url) has size of $size";
$size
}
$size = $Web | Get-SubWebSize
if ($HumanReadable -ne "None") {
$size = Invoke-Expression "$size / 1$HumanReadable";
}
$size
view raw Get-SPWebSize.ps1 hosted with ❤ by GitHub