Skip to main content

Prérequis

  • Administrateur SharePoint
  • App Registration avec Sites.FullControl.All sur la GraphAPI et SharePoint.

Actions

Le script ci dessous permet de purger l’ensmeble des site SharePoint concernant la corbeille du premier niveau. Scipt :
$ClientID = {ClientID}
$Passcert = ConvertTo-SecureString {PasswordCertificate} -AsPlainText
$pfxPath = {PathCertificatePFX}
$Path = {PathExecution}
Start-Transcript -Path $($Path + "ActionsDeleted_$((Get-Date).ToString('yyyyMMdd_HH')).log") -Append

# Variables pour se connecter sur l'APP Registration avec des droits Sites.FullControl.
$adminUrl       = {AdminURL}

# 1ere connexion pour récupérer tous les sites SharePoint en me basant sur mes droits nominatifs.
Connect-PnPOnline -Url $adminUrl -Interactive -ClientId $ClientID  -WarningAction Ignor
$sites = Get-PnPTenantSite | ? {$_.Url -like "*$($adminUrl)/sites*"}

$AllSize = 0

# 2eme connexion sur chaque site pour effectuer une purge.
Foreach ($s in $sites)
{
    Write-Host "$($s.Url)" -ForegroundColor Yellow
    Connect-PnPOnline -Url $s.Url -ClientId $ClientID -CertificatePassword $Passcert -CertificatePath $pfxPath -Tenant {TenantName.onmicrosoft.com}
    Get-PnPRecycleBinItem -RowLimit 10000 | Select-object Title, Id, DirName, Size | Format-List
    $AllSize = $AllSize + (Get-PnPRecycleBinItem -RowLimit 10000 | Measure-Object -Property Size -Sum).Sum
    Write-Host "Removing in doing" -ForegroundColor "Red"
    While( $null -ne (Get-PnPRecycleBinItem -RowLimit 500))
    {
        Get-PnPRecycleBinItem -RowLimit 500 | Clear-PnPRecycleBinItem -Force
    }
}

[PSCustomObject]@{
    TotalBytes = $AllSize
    TotalMB    = [math]::Round($AllSize / 1MB, 2)
    TotalGB    = [math]::Round($AllSize / 1GB, 3)
}

# Déconnexion.
Disconnect-PnPOnline -ClearPersistedLogin