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)
}
}
}
}
}