Sharepoint Online: Jak najít a smazat prázdné složky - tuned

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

$DocumentLibraryName - název knihovny dokumentů, většinou nabývá hodnoty "Documents" nebo "Sdilene Dokumenty" viz popisek v předchozím článku
 
$FolderSiteRelativeURL - relativní cesta ke složce, nad kterou chcete report a výmaz prázdných složek provést. Výmaz se provede rekurzivně.
 
$reportOnly - pokud je $true, simuluje se výmaz prázdné složky, ale reálně se neprovede
 
$CSVExport - pokud je $true, všechny složky, které neobsahují data a jsou určeny k výmazu, budou exportovány do CSV souboru $CSVFile
 
$force - pokud je nastaveno na $true, systém se neptá, zda složku smazat, ale rovnou ji maže, pokud je nastaveno na $false, každý výmaz je potřeba potvrdit.
Potvrdit vymaz slozky

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.

Potvrdit vymaz slozky

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

Report prazdne slozky SharePoint Online

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.

Miroslav Šraga

Sdílím své zkušenosti s Microsoft 365 a Azure. Návody, řešení problémů a postřehy ze správy IT.