Autor: Martin Bradáč

Řekněme, že v PowerAutomate vytvoříte tok, který na základě určitého klíče rozdělí soubory do složek a podsložek. Zároveň ale chcete, aby takto uspořádané soubory byly dostupné na souborovém serveru. Sáhnete po prémiovém konektoru a pokusíte se zapsat soubor s cestou pomocí brány dat. Jenže narazíte na problém. Alespoň v době psaní tohoto článku (červen 2021) konektor vytváření složek na lokálním disku prostě neumožnoval. Jinou překážkou může být bezpečnostní politika zakazující gateway, případně neochota platit dražší licenci. Řešení je snadné – PnP.PowerShell.

Výhodou PowerShellu je, že na lokálním disku vytvoří cestu, jakou potřebujeme. Bohužel nelze jednoduše stáhnout jen nově uložený soubor. Toto omezení lze obejít vytvořením „výměnné knihovny“. Tam se soubory nahrají do požadované struktury a po stažení se smažou.

Věnujte pozornost poslední části a vyplňte potřebné parametry.

Function Download-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder, $DestinationFolder)
    #Získej relativní URL
    $FolderURL = $Folder.ServerRelativeUrl.Substring($Folder.Context.Web.ServerRelativeUrl.Length)
    $LocalFolder = $DestinationFolder + ($FolderURL -replace “/”,”\”)
    #Vytvoř cestu, pokud neexistuje
    If (!(Test-Path -Path $LocalFolder)) {
            New-Item -ItemType Directory -Path $LocalFolder | Out-Null
            Write-host -f Yellow “Created a New Folder ‘$LocalFolder'”
    }
            
    #Získej všechny soubory ve složce
    $FilesColl = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType File
    #Proveď pro každý soubor
    Foreach($File in $FilesColl)
    {
        Get-PnPFile -ServerRelativeUrl $File.ServerRelativeUrl -Path $LocalFolder -FileName $File.Name -AsFile -force

        Write-host -f Green “`tDownloaded File from ‘$($File.ServerRelativeUrl)'”

    }

    #Získej strukturu 
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType Folder
    Foreach ($Folder in $SubFolders | Where {$_.Name -ne “Forms”})
    {
        
        Download-SPOFolder $Folder $DestinationFolder
    }
Function Delete-PnPEmptyFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    $FolderSiteRelativeURL = $Folder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)
    #Zpracuje všechny podsložky
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
    Foreach($SubFolder in $SubFolders)
    {
        #Vynechání systémových s skrytých složek
        If(($SubFolder.Name -ne “Forms”) -and (-Not($SubFolder.Name.StartsWith(“_”))))
        {
            
            Delete-PnPEmptyFolder -Folder $SubFolder
        }
    }
    
    $Files = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType File
    $SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeURL -ItemType Folder
 
    If ($Files.Count -eq 0 -and $SubFolders.Count -eq 0)
    {
        #Odstranění složky
        $ParentFolder = Get-PnPProperty -ClientObject $Folder -Property ParentFolder
        $ParentFolderURL = $ParentFolder.ServerRelativeUrl.Substring($Web.ServerRelativeUrl.Length)   
        Remove-PnPFolder -Name $Folder.Name -Folder $ParentFolderURL -Force -Recycle
        Write-Host -f Green (“Deleted Folder: ‘{0}’ at ‘{1}'” -f $Folder.Name, $Folder.ServerRelativeURL)
    }
 
}
  
#Prametry
$SiteURL = “https://!!!!!adresa webu!!!!!!!”
$FolderSiteRelativeURL = “/Název knihovny”
$DownloadPath =”C:\!!!!!!!cesta!!!!!!!”
  
#Připojení
Connect-PnPOnline -Url $SiteURL -UseWebLogin
  
#Získej složku ke stažení
$Folder = Get-PnPFolder -Url $FolderSiteRelativeURL
  
#Stáhni složku
Download-SPOFolder $Folder $DownloadPath

#Uklid

 
#Zjisti slozky
$Web = Get-PnPWeb
$List = Get-PnPList -Identity $FolderSiteRelativeURL -Includes RootFolder
#Smaz prazdne slozky
Delete-PnPEmptyFolder $List.RootFolder