Este script corre en SharePoint 2010 y estimo también en 2013.
A continuación veremos un script que recorre todos los sitios de una colección de sitios:
-----Inicio del script ListadoSitios.ps1 -----
$File = "D:\scripts\MiSitio-EspacioOcupado.CSV"
#Escribimos el encabezado en el archivoAdd-Content -Path $File -Value "Titulo,Url,Size,LastDate"
#definimos la fecha más antigua para que tengamos un punto de comparación inicial la definimos global para que podamos obtener su valor fuera del método donde se asigna.
$global:LastDate = Get-Date
$global:LastDate = $global:LastDate.AddDays(-10000)
#Método que Obtiene el sitio primario y llama el método que obtenien los sub.sitios.
function GetWebSizes ($StartWeb)
{
$web = Get-SPWeb $StartWeb
GetSubWebSizes -Web $web
$web.Dispose() # Importante destruir el objeto SPWeb para liberar la memoria RAM
}
Cuando utilizar el Dispose en el siguiente enlace: https://blogs.technet.microsoft.com/stefan_gossner/2008/12/05/disposing-spweb-and-spsite-objects/
function GetSubWebSizes ($Web)
{
#Inicializamos nuevamente la fecha de partida para comparación
$global:LastDate = Get-Date
$global:LastDate = $global:LastDate.AddDays(-10000)
#Recorremos cada subsitio de forma recursiba
foreach ($subweb in $Web.GetSubwebsForCurrentUser())
{
[long]$webtotal = 0
#Recorremos cada carpeta del subistio para obtener el espacio ocupado
foreach ($folder in $subweb.Folders)
{
$webtotal += GetFolderSize -Folder $folder
}
$content = $subweb.Url + "," + $subweb.Title + "," + $webtotal + "," + $global:LastDate
Add-Content -Path $File -Value $content
write-host $content
#LLamada recursiva al mismo método
GetSubWebSizes -Web $subweb
}
}
function GetFolderSize ($Folder)
{
[long]$folderSize = 0
foreach ($file in $Folder.Files)
{
#Compara la fecha de la ultima modificación del archivo con la fecha de punto de partida y si es mas reciente la del archivo entonces la reemplaza
if ($file.TimeLastModified -gt $global:LastDate){
$global:LastDate = $file.TimeLastModified
}
#Acumula el valor de cada archivo en bytes
$folderSize += $file.Length;
}
foreach ($fd in $Folder.SubFolders)
{
$folderSize += GetFolderSize -Folder $fd
}
return $folderSize
}
GetWebSizes -StartWeb HTTP://MiSharePoint
-----fin del script ListadoSitios.ps1 -----
Si necesitamos recorrer todas las colecciones de sitio solo hay que agregar las siguientes lineas de comando:
function GetWebSizes ($StartWeb)
{
$sites = Get-SPSite –StartWeb -Limit All
foreach($site in $Sites){
$web = $site.RootWeb
GetSubWebSizes -Web $web
$web.Dispose() # Importante destruir el objeto SPWeb para liberar la memoria RAM
}
}
Eso es todo amigos. SharePoint4Fun!,
Juan Manuel Herrera Ocheita
No hay comentarios.:
Publicar un comentario