This is the first PowerShell-script I ever wrote.
I want to keep digging into the folder 10 times. Is there a better way to do this than my way to keep repeating?
Here is the script:
# Connect Connect-PnPOnline -Url https://site.sharepoint.com/sites/atp/tt -Interactive # Get parentSource folder $parentSource="SourceLibrary/SourceFolder" # Get parentTarget folder $parentTarget="TargetLibrary3/TargetFolder" $parentSourceFolders = Get-PnPFolderItem $parentSource # start loop to folders/files in the parentSource folder # if childFolder already in parentTarget folder Foreach ($folder in $parentSourceFolders) { $TargetFolder = $parentTarget + "/" + $folder.Name Copy-PnPFile -SourceUrl $parentSource/$($folder.Name) -TargetUrl $TargetFolder -Force -OverwriteIfAlreadyExists Write-Host "COPY:" $parentSource/$($folder.Name) Write-Host "PASTE:" $TargetFolder if(Get-PnPFolderInFolder -FolderSiteRelativeUrl $parentSource/$($folder.Name)){ # start another loop to folders/files in the childFolder $childFolder1stSubfolders = Get-PnPFolderInFolder -FolderSiteRelativeUrl $parentSource/$($folder.Name) Foreach ($sub1folder in $childFolder1stSubfolders) { Copy-PnPFile -SourceUrl $parentSource/$($folder.Name)/$($sub1folder.Name) -TargetUrl $TargetFolder/$($sub1folder.Name) -Force -OverwriteIfAlreadyExists Write-Host "COPY:" $parentSource/$($folder.Name)/$($sub1folder.Name) Write-Host "PASTE:" $TargetFolder/$($sub1folder.Name) if(Get-PnPFolderInFolder -FolderSiteRelativeUrl $parentSource/$($folder.Name)/$($sub1folder.Name)){ $childFolder2ndSubfolders = Get-PnPFolderInFolder -FolderSiteRelativeUrl $parentSource/$($folder.Name)/$($sub1folder.Name) Foreach ($sub2folder in $childFolder2ndSubfolders) { Copy-PnPFile -SourceUrl $parentSource/$($folder.Name)/$($sub1folder.Name)/$($sub2folder.Name) -TargetUrl $TargetFolder/$($sub1folder.Name)/$($sub2folder.Name) -Force -OverwriteIfAlreadyExists Write-Host "COPY:" $parentSource/$($folder.Name)/$($sub1folder.Name)/$($sub2folder.Name) Write-Host "PASTE:" $TargetFolder/$($sub1folder.Name)/$($sub2folder.Name) } } } } }