sábado, 30 de enero de 2016

Script para obtener el espacio ocupado y la ultima modificación realizada a los documentospor sitio para SharePoint OnPremises

Estimar el espacio ocupado de un sitio no es algo fácil de obtener ya que cada estructura de sitio y de las listas y bibliotecas de SharePoint ocupan un espacio no determinado del todo.  Lo que mejor podemos hacer es sumar el espacio de los archivos almacenados en las bibliotecas de SharePoint.
Resultado de imagen para sharepoint powershell
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.: