top of page
  • Arnaud

[SharePoint] Générer un rapport de suppression des fichiers et dossiers

Qu'elle soit le fruit d'une malveillance ou d'une inadvertance, superviser la suppression de ses données peut éviter de nombreuses surprises.

Nous allons pour cela utiliser un script powershell, et le journal d'Audit unifié.


Il est également possible de configurer une alerte directement dans SharePoint, néanmoins vous aurez moins d'informations et vous ne pourrez pas organiser les données comme vous le souhaitez.


Nous allons dans un premier temps définir certaines variables :


-L'adresse de la bibliothèque que vous souhaitez surveiller

$SiteURL = "https://yourtenant.sharepoint.com/sites/yoursite/yourlibrary"

-L'endroit ou vous souhaitez stocker votre rapport (en l'occurrence le bureau de l'utilisateur actuel)

$FilePath = [Environment]::GetFolderPath("Desktop")

-Et enfin le délai de recherche (ici ce sont les suppressions sur la dernière journée à partir de maintenant)

$end = Get-Date
$start = $end.AddDays(-1)

Maintenant que nos variables sont définis on peut lancer la connexion

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential (Get-Credential) -Authentication Basic -AllowRedirection

Import-PSSession $Session -DisableNameChecking

On définit un style pour le tableau html du rapport

$Html = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@

Pour finir on lance la recherche pour les fichiers ...

$AuditDataFiles = Search-UnifiedAuditLog -StartDate $start -EndDate $end -RecordType SharePointFileOperation -ResultSize 5000 -Operations "FileDeleted" -SessionCommand ReturnLargeSet -SessionId "ExtractLogs" -ObjectIds $SiteURL

$ConvertedOutputFiles1 = $AuditDataFiles | Select-Object -ExpandProperty AuditData | ConvertFrom-Json

$ConvertedOutputFiles2 = $ConvertedOutputFiles1 | SELECT CreationTime,UserId,SourceFileName,SourceRelativeUrl,ClientIP | sort CreationTime 
	
$ConvertedOutputFiles2 | SELECT @{Name="Deletion Time";Expression={"{0:HH:mm:ss dd/MM/yyyy}" -f ([DateTime]$_.CreationTime)}},@{Name="User Name";Expression={$_.UserId}},@{Name="File Deleted";Expression={$_.SourceFileName}},@{Name="Parent Folder";Expression={$_.SourceRelativeUrl}},ClientIP | ConvertTo-Html -Head $Html | Out-File -FilePath $FilePath\files.html

... et les dossiers

$AuditDataFolders = Search-UnifiedAuditLog -StartDate $start -EndDate $end -RecordType SharePointFileOperation -ResultSize 5000 -Operations "FolderDeleted" -SessionCommand ReturnLargeSet -SessionId "ExtractLogs" -ObjectIds $SiteURL

$ConvertedOutputFolders1 = $AuditDataFolders | Select-Object -ExpandProperty AuditData | ConvertFrom-Json

$ConvertedOutputFolders2 = $ConvertedOutputFolders1 | SELECT CreationTime,UserId,SourceFileName,SourceRelativeUrl,ClientIP | sort CreationTime 

$ConvertedOutputFolders2 | SELECT @{Name="Deletion Time";Expression={"{0:HH:mm:ss dd/MM/yyyy}" -f ([DateTime]$_.CreationTime)}},@{Name="User Name";Expression={$_.UserId}},@{Name="File Deleted";Expression={$_.SourceFileName}},@{Name="Parent Folder";Expression={$_.SourceRelativeUrl}},ClientIP | ConvertTo-Html -Head $Html | Out-File -FilePath $FilePath\folders.html


Une fois terminé vous devriez récupérer deux tableaux html sur votre bureau, ressemblant à ceci :


bottom of page