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