Here's some PowerShell to crawl SharePoint 2007 webs to report on all document libraries, the documents, and the versions. The output csv can then be opened in Excel and filtered, pivoted, etc.
Paste the code below into a .ps1 file, and call it from a PowerShell prompt on a WFE in the SharePoint 2007 farm.
Param(
[Parameter(Mandatory=$true)] [string]$siteCollectionUrl = 'http://rootweb',
[string]$delimiter = "`t",
[int]$maxWebs = 200
)
$dateStr = '{0:yyyyMMdd-HHmm}' -f $(Get-Date)
$outfile = "VersionSizeReport_$dateStr.csv"
function MAIN
{
#Call the Function to Generate Version History Report
GenerateVersionSizeReport $siteCollectionUrl
}
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
Function Get-SPWebApplication()
{
Param( [Parameter(Mandatory=$true)] [string]$WebAppURL )
return [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup($WebAppURL)
}
Function global:Get-SPSite()
{
Param( [Parameter(Mandatory=$true)] [string]$SiteCollURL )
if($SiteCollURL -ne '')
{
return new-Object Microsoft.SharePoint.SPSite($SiteCollURL)
}
}
Function global:Get-SPWeb()
{
Param( [Parameter(Mandatory=$true)] [string]$SiteURL )
$site = Get-SPSite($SiteURL)
if($site -ne $null)
{
$web=$site.OpenWeb();
}
return $web
}
Function GenerateVersionSizeReport()
{
Param( [Parameter(Mandatory=$true)] [string]$WebAppURL )
$WebApp=Get-SPWebApplication($WebAppURL)
#Write the CSV Header - Tab Separated
"Site Name$($delimiter)Library$($delimiter)File URL$($delimiter)File Type$($delimiter)Last Modified$($delimiter)Item Versions$($delimiter)File Versions$($delimiter)Latest Version Size(MB)$($delimiter)Versions Size(MB)$($delimiter)Total File Size(MB)" |
out-file $outfile
#Loop through each site collection
foreach($Site in $WebApp.Sites)
{
$webCount = 0
foreach($Web in $Site.AllWebs)
{
$webCount++
if (($webCount -le $maxWebs) -and ($webCount -ne -1))
{
Write-Host "WEB: $($Web.url)"
foreach ($List in $Web.Lists)
{
Write-Host "`nLIST (Items:$($List.ItemCount), Type:$($List.BaseType)): $($Web.url)$($List.RootFolder.ServerRelativeUrl)"
#if ( ($List.BaseType -eq "DocumentLibrary") -and ($List.Hidden -eq $false) )
if ($List.BaseType -eq "DocumentLibrary")
#if ($List.EnableVersioning -eq $true)
{
$itemNum = 0
Write-Host "`t" -noNewLine
foreach ($ListItem in $List.Items)
{
$itemNum++
if (-not ($itemNum % 10))
{
Write-Host "$itemNum " -noNewLine
}
if (-not ($itemNum % 200))
{
Write-Host "`n`t" -noNewLine
}
$versionSize=0
#Get the versioning details
foreach ($FileVersion in $ListItem.File.Versions)
{
$versionSize = $versionSize + $FileVersion.Size;
}
#To Calculate Total Size(MB)
$TotalFileSize= [Math]::Round(((($ListItem.File.Length + $versionSize)/1024)/1024),2)
#Convert Size to MB
$VersionSize= [Math]::Round((($versionSize/1024)/1024),2)
#Get the Size of the current version
$CurrentVersionSize= [Math]::Round((($ListItem.File.Length/1024)/1024),2)
#Get Site Name
if ($Web.IsRootWeb -eq $true)
{
$siteName = $Web.Title +" - Root";
}
else
{
$siteName= $Site.RootWeb.Title + " - " + $Web.Title;
}
"$($siteName)"`
+ "$($delimiter)$($List.RootFolder.ServerRelativeUrl)"`
+ "$($delimiter)$($Web.Url)/$($ListItem.Url)"`
+ "$($delimiter)$($ListItem['File Type'].ToString())"`
+ "$($delimiter)$($ListItem['Modified'].ToString())"`
+ "$($delimiter)$($ListItem.Versions.Count)"`
+ "$($delimiter)$($ListItem.File.Versions.Count)"`
+ "$($delimiter)$CurrentVersionSize"`
+ "$($delimiter)$versionSize"`
+ "$($delimiter)$TotalFileSize"`
| Out-File $outfile -Append
}
}
} #webcount maxcount
}
$Web.Dispose()
}
$Site.Dispose()
}
write-host "`n`nVersioning Report Generated Successfully!`n$outfile"
}
MAIN
No comments:
Post a Comment