Merhaba arkadaşlar bugün sizlere powershell scripti kullanarak bir sharepoint sitesinde bulunan bir listedeki öğeleri aynı sitede bulunan başka bir listeye nasıl kopyalanacağını göstereceğim.
Bunun için 3 farklı durum ve bu durumlara karşı nasıl bir script kullanacağımızdan bahsedeceğiz.
İlk durumumuzda listelerimizin kolonları bire bir ve herhangi bir öğede ek olmadığı durumda aşağıdaki script ile sorunsuz bir şekilde taşıma yapabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$WebURL = "https://portal.yunusemrearac.com" $SourceListName = "liste1" $TargetListName= "liste2" $web = Get-SPWeb $WebURL $SourceList = $web.Lists[$SourceListName] $TargetList = $web.Lists[$TargetListName] $SourceColumns = $sourceList.Fields $SourceItems = $SourceList.GetItems(); Foreach($SourceItem in $SourceItems) { $TargetItem = $TargetList.AddItem() Foreach($column in $SourceColumns) { if($column.ReadOnlyField -eq $False -and $column.InternalName -ne "Attachments") { $TargetItem[$($column.InternalName)] = $sourceItem[$($column.InternalName)]; } } $TargetItem.Update(); } |
Yukarıdaki scripti kullanırken sadece üst kısımda yer alan site adresini ve liste isimlerini güncellemeniz yeterli olacaktır.
Bu durumlardan bir diğer ise bu liste öğelerinde ek yani attachment ta olması durumudur. Bildiğiniz gibi listede öğe oluşmadan ek eklemek olmayacağı için yukarıdaki powershell kodumuza sonunda update işleminden hemen sonra attachmentları da kopyalayacak aşağıdaki script eklememiz gerektedir.
1 2 3 4 5 |
Foreach($Attachment in $SourceItem.Attachments) { $spFile = $SourceList.ParentWeb.GetFile($SourceItem.Attachments.UrlPrefix + $Attachment) $TargetItem.Attachments.Add($Attachment, $spFile.OpenBinary()) } |
Son ihtimalimiz ve oluşabilecek durumlardan biri ise listelerdeki kolon isimlerinin farklı olma durumudur. Bu durumda ise yapacağımız değişiklik ise scriptimizde yer alan kolon adlarımızın dinamik bir şekilde setlenmesi kısmını manuel olarak tanımlamamız gerekecektir.
Bu kısımda da aşağıdaki script kısmını gerekli yere yazarak kolon adlarını tanımlamanız gerekmektedir.
1 2 3 4 5 6 7 8 9 |
$SourceItems = $SourceList.items foreach ($SourceItem in $SourceItems) { write-host -foregroundcolor yellow Copying Item: $SourceItem["Title1"] $TargetItem = $TargetList.AddItem() $TargetItem["Title1"] = $SourceItem["Title2"] $TargetItem["Name1"] = $SourceItem["Name2"] $TargetItem.update() } |
Yukarıda gördüğünüz gibi bir listeden başka bir listeye kolaylıkla öğelerinizi taşıyabilir ve bu sayede arşiv yapısı kurabilirsiniz.
İlk Yorumu Siz Yapın