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.

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.

Napsat komentář