viernes, 27 de noviembre de 2015

Script para saber el tamaño de una carpeta de una biblioteca en SharePoint 2010-2013

 

Esta solicitud me hicieron hace un momento y como no vi un ejemplo en especifico para esto decidi compartirlo con mis amigos lectores.

Los tres parametros que necesitamos son: url del sitio web en cuestion, el nombre de la biblioteca y el nombre de la carpeta.  Como se muestra abajo:

$urlWebSite = “http://hostname/siteurl/sub-siteurl

$nombreLibreria = "Nombre-Libreria"

$nombreCarpeta = "Nombre-Carpeta"

Luego debemos de obtener el objeto SPWeb para encontrar la bilioteca de la siguiente forma:

$web = get-SPWeb $urlWebSite

Una vez que lla obtuvimos el objeto SPWeb que representa el sitio web en SharePoint obtenemos la biblioteca con la colección Folders del objeto SPWeb, como se muestra a continuación:

$folder =  $web.Folders[$nombreLibreria]

Ahora que almacenamos en la variable $folder la bilbioteca en cuestion, necesitamos obtener la carpeta que buscamos a través de la colección SubFolerds del objeto SPFolder, de la siguiente forma:

$subfolder = $folder.SubFolders[$nombreCarpeta]

Con eso tenemos ya la ubicación deseada para iniciar el proceso de lectura de los bytes ocupados en la carpeta y sub carpetas, para ello necesitamos crear un funcion que llamemos de forma recursiva hasta que obtengamos el espacio total ocupado.

[long]$total = 0

$total = GetFolderSize($subfolder)

La función es la siguiente:

function GetFolderSize ($Folder)

{

    [long]$folderSize = 0 

    foreach ($file in $Folder.Files)

    {

        write-host "Nombre documento" $file.Name

        $folderSize += $file.Length;

        write-host "Total en bytes que va acumulando:" $folderSize

    }

    foreach ($fd in $Folder.SubFolders)

    {

        $folderSize += GetFolderSize -Folder $fd

    }

    return $folderSize

}

Lo que nos falta entonces es convertir los bytes en megas, y en gigas es es lo que hacemos a continuación:

$totalInMb = ($total/1024)/1024

$totalInMb = "{0:N2}" -f $totalInMb

$totalInGb = (($total/1024)/1024)/1024

$totalInGb = "{0:N2}" -f $totalInGb

write-host "Tamaño total de la carpeta" $StartWeb "es" $total " Bytes,"

write-host "son " $totalInMb "MB o " $totalInGb "GB"

Y ahora necesitamos indicarle a Windows que libere el recurso en memoria que ocupamos a través del objeto SPWeb la invocar el comando  $web = get-SPWeb $urlWebSite , y lo hacemos de la siguiente forma:

$web.Dispose()

Para poner todo en orden debemo de prepar un contenedor de este script en un archivo con extension .ps1, por ejemplo:

C:\>GetFolderSize.ps1

y debera contener el siguiente orden del código descripto arriba:

<!--- Begin of File –->

function GetFolderSize ($Folder)

{

    [long]$folderSize = 0 

    foreach ($file in $Folder.Files)

    {

        write-host "Nombre documento" $file.Name

        $folderSize += $file.Length;

        write-host "Total en bytes que va acumulando:" $folderSize

    }

    foreach ($fd in $Folder.SubFolders)

    {

        $folderSize += GetFolderSize -Folder $fd

    }

    return $folderSize

}

$urlWebSite = “http://hostname/siteurl/sub-siteurl

$nombreLibreria = "Nombre-Libreria"

$nombreCarpeta = "Nombre-Carpeta"

$web = get-SPWeb $urlWebSite

$folder =  $web.Folders[$nombreLibreria]

$subfolder = $folder.SubFolders[$nombreCarpeta]

$totalInMb = ($total/1024)/1024

$totalInMb = "{0:N2}" -f $totalInMb

$totalInGb = (($total/1024)/1024)/1024

$totalInGb = "{0:N2}" -f $totalInGb

write-host "Tamaño total de la carpeta" $StartWeb "es" $total " Bytes,"

write-host "son " $totalInMb "MB o " $totalInGb "GB"

$web.Dispose()

<!--- End of File –->

Y por ultimo utilizamo el Management Shell for SharePoint para ejecutar el script de la siguiente forma:

c:\>.\GetFolderSize.ps1

Eso es todo amigos.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

No hay comentarios.: