EnjoySharePoint YouTube Channel

Powershell Script to copy the Files from one Folder to another Folder in Site collection with Exact Fields and File Versions


In this SharePoint 2013 PowerShell tutorial, we will discuss how we can use PowerShell Script to copy the Files from one Folder to another Folder in a Site collection with Exact Fields and File Versions in SharePoint 2013.

Get Office 365 Enterprise E3 Or Business Premium Subscription & Try out all the features

Below is the PowerShell script:

cls
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$web = Get-SPWeb -Identity “Site collectgion URL Here”
$org = $web.Lists.TryGetList(“TrainingMaterials”)
$dest = $web.Lists.TryGetList(“TrainingDestination”)
$folderName= “Source Folder Name”
$destFolderName = “Destination Fodler Name”

$source = $web.GetList($web.Url + “/”+$org.RootFolder.Url + “/”)
$destination= $web.GetList($web.Url + “/”+$dest.RootFolder.Url + “/”)
Write-Host $source

$itemsParent = $source.Folders.Item(0)
$itemsub= $itemsParent.Folder.SubFolders
$items= $itemsub.Item(0)
$files= $items.Files
$folder = $web.GetFolder($destination.RootFolder.Url)
Write-Host $folder
foreach ($item in $files)
{
$versionCount=$item.Versions.Count
$dateCreatedOn = $item.TimeCreated.ToLocalTime()
for ($i = 0; $i -le $versionCount; $i++)
{
$strVerComment = “”;
$bolMajorVer = $false;
$hashSourceProp = @{}
$userCreatedBy=$item.Author
if ($i -lt $versionCount)
{
$fileSourceVer = $item.Versions.Item($i)
$hashSourceProp = $fileSourceVer.Properties;
$userModifiedBycheck = $fileSourceVer.Properties.vti_modifiedby
$userModifiedBy = $web.EnsureUser($userModifiedBycheck)
$dateModifiedOn = $fileSourceVer.Created.ToLocalTime()
$strVerComment = $fileSourceVer.CheckInComment
$bolMajorVer = $fileSourceVer.VersionLabel.EndsWith(“0”) -and $true -or $false
$streamFile = $fileSourceVer.OpenBinaryStream()
}
else
{
$userModifiedBy = $item.ModifiedBy
$dateModifiedOn = $item.TimeLastModified
$hashSourceProp = $item.Properties
$strVerComment = $item.CheckInComment
$bolMajorVer = $item.MinorVersion -eq 0 -and $true,$false
$streamFile = $item.OpenBinaryStream()
}
Write-Host “Version is ” $fileSourceVer.VersionLabel
Write-Host “Iem Name” $item.Name
Write-Host “USer Created” $userCreatedBy.Name
Write-Host “USer Modified” $userModifiedBy.Name
Write-Host “Date Created” $dateCreatedOn
write-Host “Date Modiifed” $dateModifiedOn
write-Host “Adding now ”
$newFile = $folder.Files.Add($folder.Url + “/Destination/” + $item.Name,$streamFile ,$hashSourceProp,$userCreatedBy,$userModifiedBy,$dateCreatedOn,$dateModifiedOn,$strVerComment,$true)
$itmNewVersion = $newFile.Item;
$itmNewVersion[“Created”] = $dateCreatedOn
$itmNewVersion[“Modified”] = $dateModifiedOn
$itmNewVersion.UpdateOverwriteVersion()
}
}
$web.Update()
$web.Dispose()

Read some SharePoint PowerShell tutorials:

Hope this article will be helpful.

Check out Best Alternative to InfoPath -> Try Now
You May Also like the Following SharePoint Tutorials:

About Sravan kumar

I am a SharePoint Developer Working in Reputed MNC company Bangalore.

View all posts by Sravan kumar →