V předchozím článku Sharepoint Online: Jak najít a smazat prázdné složky jsem popisoval, jak lze pomocí knihovny PnP PowerShell vytvořit report prázdných složek a tyto smazat z knihovny dokumentů.
Skripty, které jsem použil tak jsou plně funkční, ale narazil jsem na jednu dost podstatnou věc: potřebuji smazat prázdné složky z knihovny dokumentů, ale nikoliv z celé knihovny ale z konkrétní podsložky a to ty původní skripty neumí. Ale protože jsem tuto funkcionalitu opravdu potřeboval (procházím knihovnu, kde jsou tisíce složek), tak jsem si k tomu sednul a vyplodil jsem tento vytuněný skript:
#Parametery
$SiteURL = "https://vas-tenant.sharepoint.com/sites/Site"
# $DocumentLibraryName = "Documents"
$DocumentLibraryName = "Sdilene dokumenty"
$FolderSiteRelativeURL = "$DocumentLibraryName/Slozka/Slozka/Archiv_Slozka/Nejnizsi slozka"
# Testovaci rezim - pokud je true, neprovede vymaz ale jen vypis
$reportOnly = $true
# Zda exportovat do CSV
$timestamp = Get-Date -Format "yyyy-MM-dd-HHmm"
$CSVExport = $true
$CSVFile = "C:\Temp\DeletedFolderReport-$timestamp.csv"
# Nastavte na $true pouze, pokud mate plne otestovano; $true = nepta se na smazani, $false = zepta se pred smazanim
$force = $false
Connect-PnPOnline -Url $SiteURL -Interactive
Function Delete-FolderContent($Folder){
$EmptyFolderArray = @()
$Subfolders = Get-PnPFolderItem -FolderSiteRelativeUrl $Folder -ItemType Folder
ForEach ($Subfolder in $Subfolders)
{
$folderPath = $Folder+"/"+$Subfolder.Name
Write-host $folderPath -ForegroundColor Yellow
# Remdddove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
Write-host "Folder name:"$Subfolder.Name" - Items:"$Subfolder.ItemCount
#Get all files & Reload Sub-folders from the given Folder
$CountFiles = Get-PnPFolderItem -FolderSiteRelativeUrl $folderPath -ItemType File
$CountSubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $folderPath -ItemType Folder
Write-host " Files: "$CountFiles.Count" Folders: "$CountSubFolders.Count -ForegroundColor Cyan
If ($CountFiles.Count -eq 0 -and $CountSubFolders.Count -eq 0)
{
Write-host " Folder name: ["$Subfolder.Name"] - folder is empty - DELETE" -ForegroundColor Green
if ($reportOnly -ne $true){
Write-Host " Deleted folder:" $Subfolder.Name "in" $Folder -ForegroundColor Red
Remove-PnPFolder -Name $Subfolder.Name -Folder $Folder -force:$force -Recycle
}
else{
Write-Host " Report only: Deleted folder:" $Subfolder.Name "in" $Folder -ForegroundColor Red
}
# Export do CSV
If($CSVExport -eq $true){
#Add the Data to Object
$EmptyFolderData = New-Object PSObject
$EmptyFolderData | Add-Member NoteProperty FolderName($Subfolder.Name)
$EmptyFolderData | Add-Member NoteProperty RelativeURL($Folder)
$EmptyFolderArray += $EmptyFolderData
#Export to CSV File
#$EmptyFolderArray | Export-CSV $CSVFile -NoTypeInformation -Append
}
}
Else{
Write-host " Folder name: ["$Subfolder.Name"] - contains data - keep" -ForegroundColor Red
}
Write-host "`n"
Delete-FolderContent($folderPath)
}
If($CSVExport -eq $true){
#Export to CSV File
$EmptyFolderArray | Export-CSV $CSVFile -NoTypeInformation -Append
}
}
Delete-FolderContent($FolderSiteRelativeURL)
Výše uvedený skript má několik základních parametrů:
$SiteURL – adresa sharepoint webu
Skript také pamatuje na to, že některé složky můžete smazat omylem, pokud tak učiníte, přesune smazaná data do koše.
Jednou z dalších vychytávek, zejména pro zpětnou kontrolu, je výpis aktuální zpracovávané pozice včetně informace o počtu souborů a složek v dané složce
Závěrem
Pokud potřebujete ve vaší organizaci pomoct s migrací do Microsoft 365 nebo Azure, vyřešit zabezpečení nebo proškolit uživatele, ozvěte se mi, určitě něco vymyslíme.