Guest User

Untitled

a guest
Sep 7th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. Add-Type -Path "C:Microsoft.SharePoint.Client.dll"
  2. Add-Type -Path "C:Microsoft.SharePoint.Client.Runtime.dll"
  3.  
  4. $username = "name@domain.com"
  5. $password = "<password here>”
  6. $srcUrl = "<enter the source Url>" ## use the full URL of the site
  7. $destUrl = "<enter the target Url>" ## use the full URL of the site
  8. $srcLibrary = "<Lib Name>"
  9. $destLibrary = "<Target Lib>"
  10. $destinationFolder = "/sites/<SITENAME>/Shared Documents/<folder inside doc lib>/" ## Make sure the folder name ends with /
  11.  
  12. $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
  13. $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
  14.  
  15.  
  16. function CreateFolders
  17. {
  18. param (
  19. [Parameter(Mandatory=$true)] $srcfolder,
  20. [Parameter(Mandatory=$true)] [string] $destFolderPath
  21. )
  22.  
  23. Write-Host "Source Folder:" + $srcfolder.Name + " dest folder:" + $destFolderPath -ForegroundColor Yellow
  24. $SPOFolder = $destWeb.GetFolderByServerRelativeUrl($destFolderPath)
  25. $FolderName = $srcfolder.Name
  26. $NewFolder = $SPOFolder.Folders.Add($FolderName)
  27. $destWeb.Context.Load($NewFolder)
  28. $destWeb.Context.ExecuteQuery()
  29. Write-Host "Folder Created - " + $FolderName -ForegroundColor Yellow
  30.  
  31. ## get source folder details
  32. $SrcFolderListItem = $srcfolder.ListItemAllFields
  33. $srcContext.Load($SrcFolderListItem)
  34. $srcContext.ExecuteQuery()
  35. ####
  36.  
  37. $SPOFolderItem = $NewFolder.ListItemAllFields;
  38. $replacedUser =$destWeb.EnsureUser($SrcFolderListItem["Editor"].Email)
  39. $SPOFolderItem["Editor"] = $replacedUser
  40. $replacedUser =$destWeb.EnsureUser($SrcFolderListItem["Author"].Email)
  41. $SPOFolderItem["Author"] = $replacedUser
  42. $SPOFolderItem["Created"] = $SrcFolderListItem["Created"]
  43. $SPOFolderItem["Modified"] = $SrcFolderListItem["Modified"]
  44. $SPOFolderItem.Update()
  45. $destContext.Load($NewFolder)
  46. $destContext.ExecuteQuery()
  47.  
  48. $fileCol = $srcfolder.Files
  49. $srcContext.Load($fileCol)
  50. $srcContext.ExecuteQuery()
  51.  
  52. ### Load the file to hash table to check with Target library.
  53. $hashFiles = @{}
  54. $DestfileCol = $NewFolder.Files
  55. $destContext.Load($DestfileCol)
  56. $destContext.ExecuteQuery()
  57. foreach ($destFile in $DestfileCol){
  58. $hashFiles.add($destFile.Name,$destFile.Name)
  59. }
  60.  
  61. foreach ($f in $fileCol)
  62. {
  63. if($hashFiles.ContainsKey($f.Name) -ne "true")
  64. {
  65. $srcContext.Load($f)
  66. $srcContext.ExecuteQuery()
  67. $id = $srcfolder.Name
  68. $nLocation =$NewFolder.ServerRelativeUrl.TrimEnd("/") + "/" + $f.Name
  69. Write-Host $nLocation
  70.  
  71. try
  72. {
  73. $fileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($srcContext, $f.ServerRelativeUrl)
  74. [Microsoft.SharePoint.Client.File]::SaveBinaryDirect($destContext, $nLocation, $fileInfo.Stream,$true)
  75. $ListItem = $f.ListItemAllFields
  76. $srcContext.Load($ListItem)
  77. $srcContext.ExecuteQuery()
  78. $fileCreated = $destWeb.GetFileByServerRelativeUrl($nLocation)
  79. $destContext.Load($fileCreated)
  80. $destContext.ExecuteQuery()
  81. $DestListItem = $fileCreated.ListItemAllFields;
  82. $replacedUser =$destWeb.EnsureUser($ListItem["Editor"].Email)
  83. $DestListItem["Editor"] = $replacedUser
  84. $replacedUser =$destWeb.EnsureUser($ListItem["Author"].Email)
  85. $DestListItem["Author"] = $replacedUser
  86. $DestListItem["Created"] = $ListItem["Created"];
  87. $DestListItem["Modified"] = $ListItem["Modified"];
  88. $DestListItem.Update()
  89. $destContext.Load($fileCreated)
  90. $destContext.ExecuteQuery()
  91. }
  92. catch
  93. {
  94. Write-Host $_ -ForegroundColor Red
  95. }
  96. }
  97. }
  98.  
  99. $fL1FolderColl = $srcfolder.Folders
  100. $srcContext.Load($fL1FolderColl);
  101. $srcContext.ExecuteQuery();
  102. foreach ($myFolder in $fL1FolderColl)
  103. {
  104. $srcContext.Load($myFolder)
  105. $srcContext.ExecuteQuery()
  106. CreateFolders $myFolder $NewFolder.ServerRelativeUrl
  107. }
  108.  
  109. }
  110.  
  111. #### The main script starts here ######
  112. $srcContext = New-Object Microsoft.SharePoint.Client.ClientContext($srcUrl)
  113. $srcContext.Credentials = $credentials
  114. $destContext = New-Object Microsoft.SharePoint.Client.ClientContext($destUrl)
  115. $destContext.Credentials = $credentials
  116. $srcWeb = $srcContext.Web
  117. $srcList = $srcWeb.Lists.GetByTitle($srcLibrary)
  118. $query = New-Object Microsoft.SharePoint.Client.CamlQuery
  119. $listItems = $srcList.GetItems($query)
  120. $srcContext.Load($srcList)
  121. $srcContext.Load($listItems)
  122. $srcContext.ExecuteQuery()
  123. $destWeb = $destContext.Web
  124. $destList = $destWeb.Lists.GetByTitle($destLibrary)
  125. $destContext.Load($destWeb)
  126. $destContext.Load($destList)
  127. $destContext.ExecuteQuery()
  128.  
  129. ########### this is to copy only certain folders
  130. #$folder = $srcWeb.GetFolderByServerRelativeUrl($srcFolder)
  131. #$srcContext.Load($folder)
  132. #$srcContext.ExecuteQuery()
  133. #Write-Host $destinationFolder
  134. #CreateFolders $folder $destinationFolder
  135. ##############
  136.  
  137. foreach($item in $listItems)
  138. {
  139. if($item.FileSystemObjectType -eq "File")
  140. {
  141. #$srcContext.Load($item)
  142. #$srcContext.ExecuteQuery()
  143. $srcF = $item.File
  144. $srcContext.Load($srcF)
  145. $srcContext.ExecuteQuery()
  146. $rootLocation = $destinationFolder + $srcF.Name
  147. Write-Host $rootLocation
  148. $fileContent = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($srcContext, $srcF.ServerRelativeUrl)
  149. [Microsoft.SharePoint.Client.File]::SaveBinaryDirect($destContext, $rootLocation, $fileContent.Stream,$true)
  150. $fItem = $srcF.ListItemAllFields
  151. $srcContext.Load($fItem)
  152. $srcContext.ExecuteQuery()
  153. $fCreated = $destWeb.GetFileByServerRelativeUrl($rootLocation)
  154. $destContext.Load($fCreated)
  155. $destContext.ExecuteQuery()
  156. $DListItem = $fCreated.ListItemAllFields;
  157. $replacedUser =$destWeb.EnsureUser($fItem["Editor"].Email)
  158. $DListItem["Editor"] = $replacedUser
  159. $replacedUser =$destWeb.EnsureUser($fItem["Author"].Email)
  160. $DListItem["Author"] = $replacedUser
  161. $DListItem["Created"] = $fItem["Created"];
  162. $DListItem["Modified"] = $fItem["Modified"];
  163. $DListItem.Update()
  164. $destContext.Load($fCreated)
  165. $destContext.ExecuteQuery()
  166. }
  167. elseif ($item.FileSystemObjectType -eq "Folder")
  168. {
  169. $srcContext.Load($item)
  170. $srcContext.ExecuteQuery()
  171. $folder = $srcWeb.GetFolderByServerRelativeUrl($item.FieldValues["FileRef"].ToString())
  172. $srcContext.Load($folder)
  173. $srcContext.ExecuteQuery()
  174. ##################
  175. Write-Host $destinationFolder
  176. CreateFolders $folder $destinationFolder
  177. }
  178. }
  179.  
  180. Write-Host "Script End"
Add Comment
Please, Sign In to add comment