Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Blog Technique de Romelard Fabrice

Les dernières Actualités de Romelard Fabrice (Alias fabrice69 ou F___) principalement autour des technologies Microsoft

Actualités

  • Toutes les actualités et informations sur les technologies Microsoft principalement autour de .NET et SQL Server

Archives

SharePoint: Comment chercher les gros fichiers d’une web application avec SharePoint 2007 et 2010

Tous les administrateurs de ferme ont le même soucis d’utilisation abusive des ressources disponibles.

Ainsi, il est régulier que les utilisateurs remontent des fichiers (image par exemple) ayant des résolutions allucinantes pour les présenter en vignette. Le fait est que ces fichiers prennent une place importante et peut entrainer d’autres soucis comme pour la saturation des quotas.

Je propose donc le script PowerShell suivant (qui fonctionne avec SharePoint 2007 et 2010)

[bool]$Verbose = $false

function Get-SPSite-Usage-Information([object]$TheSite)
{
    write-host "----------------------------------------------------- "
    write-host " Site Usage: ", $TheSite.Url
    $UsageInfo = $TheSite.Usage;

    [int]$MyDiscussionStorage = $UsageInfo.DiscussionStorage/(1024*1024)
    [int]$MyStorage = $UsageInfo.Storage/(1024*1024)
    [int]$MyBandwidth = $UsageInfo.Bandwidth/(1024*1024)
    write-host "   >>> Site DiscussionStorage: ", $MyDiscussionStorage, "MB"
    write-host "   >>> Site Storage: ", $MyStorage, "MB"
    write-host "   >>> Site Bandwidth: ", $MyBandwidth, "MB"
    write-host "   >>> Site Hits: ", $UsageInfo.Hits
    write-host "   >>> Site Visits: ", $UsageInfo.Visits

    write-host "----------------------------------------------------- "
}

function Get-SPSite-StoreManagement-Details([object]$TheSite, [string]$FileExtension, [double]$ExceededSize)
{
    [double]$MyFileSize = 0
    [string]$myFileName
    [string]$myFileCompleteURL
    [string]$MyFilterOption = "LeafName Like '%."+ $FileExtension +"' AND TotalSize > "+ [string]($ExceededSize*1024*1024)
    [string]$MySortOption = "TotalSize DESC"
    [System.Data.DataTable]$MyResultSetFiltered
    Write-Host "SiteURL", $TheSite.Url

# ltVar: What kind of storage management information to display
# List = 1
# DocumentLibrary = 2
# Document = 3
# sordVar: the direction in which the items are to be sorted
# Increasing = 0×10
# Decreasing = 0×11
# soVar: whether the items are sorted by size or by date
# Size=0
# Date = 1
# nMaxResults: the number of results to return

    $MyInformationType = [Microsoft.SharePoint.SPSite+StorageManagementInformationType]::Document
    $MysortOrder = [Microsoft.SharePoint.SPSite+StorageManagementSortOrder]::Decreasing
    $MySortOn = [Microsoft.SharePoint.SPSite+StorageManagementSortedOn]::Size
    [int]$MaxItems = 999999

    $SiteURLRoot = $TheSite.url.split("/")
   
    [System.Data.DataTable]$MyResultSet = $TheSite.StorageManagementInformation($MyInformationType, $MysortOrder, $MySortOn, $MaxItems)

    Write-Host "MyResultSet Count: ", $MyResultSet.Rows.Count
    $MyResultSetFiltered = $MyResultSet.Select($MyFilterOption, $MySortOption)
    Write-Host "MyResultSetFiltered Count: ", $MyResultSetFiltered.Count

    Write-Host " ----------------- "
    foreach($myRow in $MyResultSetFiltered)
    {
        if($verbose)
        {
            foreach($MyColumn in $MyResultSet.Columns)
            {
                Write-Host "      ->Column:", $MyColumn, " - Value:", $myRow[$MyColumn]
            }
        }

        $myFileName = [string]$myRow['LeafName']
        $MyFileSize = [int]$myRow['TotalSize']/(1024*1024)
        $myFileCompleteURL = $SiteURLRoot[0] + "//" + $SiteURLRoot[2] + "/" + [string]$myRow['Directory'] + "/" + $myFileName

        Write-Host " FileName:", $myFileName
        Write-Host " FileSize[MB]:", $MyFileSize
        Write-Host " File URL:", $myFileCompleteURL
        Write-Host " ----------------- "
    }    
    $MyResultSet.Dispose()
}

function Get-All-SPSite-StoreManagement([string]$WebAppURL, [string]$FileExtension, [double]$ExceededSize)
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

    $Thesite = new-object Microsoft.SharePoint.SPSite($WebAppURL)
    Write-Host "WebApp Root URL", $Thesite.Url
    $oApp = $Thesite.WebApplication
   
    foreach ($MySite in $oApp.Sites)
    {
        #Write-Host "  Site URL", $MySite.Url
        Get-SPSite-Usage-Information $MySite
        Get-SPSite-StoreManagement-Details $MySite $FileExtension $ExceededSize
    }
    $Thesite.Dispose()
}

function StartProcess()
{
    # Create the stopwatch
    [System.Diagnostics.Stopwatch] $sw;
    $sw = New-Object System.Diagnostics.StopWatch
    $sw.Start()
    cls

    Get-All-SPSite-StoreManagement “http://mywebApplication” "jpg" 1 #Adapt the size Value as you need – 1MB and the extension you need to control
    $sw.Stop()
    # Write the compact output to the screen
    write-host "Time: ", $sw.Elapsed.ToString()
}

StartProcess

Il faudra adapter la requête avec l’extension voulue et la taille minimal à traquer. Ce script vous donnera alors un résultat tel que le suivant :

image

Vous y trouverez un résumé de l’utilisation du site (racine ou sous-site), et la liste des fichiers ayant l’extension recherchée (JPG) et dépassant la taille limite (1 MB).


Attention

Ce script ne fonctionne pas sous SharePoint 2013, car la méthode a été désactivée par Microsoft:

En revanche, l’utilisation pour SharePoint 2010 et 2007 est totalement fonctionnelle.


Liens annexes

Un ensemble de pages qui proposent des informations sur les méthodes utilisées :

Romelard Fabrice [MBA]

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 12 mars 2014 14:24 par ROMELARD Fabrice

Commentaires

ROMELARD Fabrice a dit :

Fichier PowerShell ajouté sur le site CodePlex :

- https://sharepointpsscripts.codeplex.com/releases/view/21675

Fabrice Romelard [MBA]

# mars 12, 2014 14:44
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [MVC] Plusieurs verbes pour une seule méthode du controller par Blog de Jérémy Jeanson le il y a 9 heures et 33 minutes

- SPS Paris 2015 – Back from MS Ignite par Le blog de Patrick [MVP Office 365] le 05-26-2015, 16:04

- Windows 10 IOT– exploitez vos capteurs en tout genre ! par Blog de Daniel TIZON [daniel] le 05-26-2015, 08:06

- SharePoint Saturday Paris 2015 c’est le 30 mai ! par Le blog de Patrick [MVP Office 365] le 05-25-2015, 21:07

- Configurer un écran 5 pouces 800x480 pour Raspberry Pi2 sous Windows 10 IOT par Blog de Daniel TIZON [daniel] le 05-22-2015, 07:52

- Office 365 : Sway est disponible en preview par Le petit blog de Pierre / Pierre's little blog le 05-21-2015, 22:24

- Première installation de Raspbian sur RASPBERRY Pi 2 par Blog de Daniel TIZON [daniel] le 05-14-2015, 22:17

- Mobile Day : c’est le 25 et c’est chez Microsoft! par Fathi Bellahcene le 05-13-2015, 23:48

- TFS 2013 : Migration d’une ferme TFS 2010 vers 2013 sans upgrade par Blog Technique de Romelard Fabrice le 05-01-2015, 16:28

- [ #SharePoint 2016 ] frappe à nos portes ! (1/2) par Le blog de Patrick [MVP Office 365] le 04-19-2015, 23:21