SharePoint Online: PowerShell kullanarak Ekleri Bir Listeden Diğerine Kopyalama
Gereksinim: Ekleri SharePoint Online'da bir listeden diğerine kopyalayın.
Eki SharePoint Online'da Başka Bir Listeye Kopyalamak için PowerShell:
SharePoint Online listeleri arasında ekleri kopyalamam gerekiyordu. (yalnızca ekler - Öğeleri listelemez!). Bu komut dosyası, ekleri kaynak listeden alır, "Eşleme Sütunu" değerine göre eşleşen liste öğesini arar ve liste eklerini hedef liste öğelerine ekler.
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
Function Copy-Attachments()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $SourceListName,
[Parameter(Mandatory=$true)] [string] $TargetListName,
[Parameter(Mandatory=$false)] [string] $MappingColumn="Title"
)
Try {
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get the Source List & Target Lists
$SourceList = $Ctx.Web.Lists.GetByTitle($SourceListName)
$TargetList = $Ctx.Web.Lists.GetByTitle($TargetListName)
#Get All Items
$SourceListItems = $SourceList.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
$TargetListItems = $TargetList.GetItems([Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery())
$Ctx.Load($SourceListItems)
$Ctx.Load($TargetListItems)
$Ctx.ExecuteQuery()
#Iterate through each list item from source
ForEach($SourceItem in $SourceListItems)
{
#Get All attachments from the List Item
$AttachmentsColl = $SourceItem.AttachmentFiles
$Ctx.Load($AttachmentsColl)
$Ctx.ExecuteQuery()
#Get Matching List item in the target list
$ListItem = $TargetListItems | Where { $_[$MappingColumn] -eq $SourceItem[$MappingColumn]}
if($ListItem -ne $null)
{
#Get attachment for each list item
ForEach($Attachment in $AttachmentsColl)
{
Write-host "Copying attachment '$($Attachment.FileName)' from Item ID '$($SourceItem.ID)'"
#Get attachment File from Source List Item
$File = $Ctx.Web.GetFileByServerRelativeUrl($Attachment.ServerRelativeUrl)
$Ctx.Load($File)
$Ctx.ExecuteQuery()
#Get the Source File Content
$FileContent = $File.OpenBinaryStream()
$Ctx.ExecuteQuery()
$Buffer = New-Object Byte[]($File.length)
$BytesRead = $FileContent.Value.Read($Buffer, 0, $Buffer.Length)
$MemoryStream = New-Object -TypeName System.IO.MemoryStream(,$Buffer)
#Add Attachment to Target List Item
$AttachmentCreation = New-Object Microsoft.SharePoint.Client.AttachmentCreationInformation
$AttachmentCreation.ContentStream = $MemoryStream
$AttachmentCreation.FileName = $Attachment.FileName
[void]$ListItem.AttachmentFiles.Add($AttachmentCreation)
$Ctx.ExecuteQuery()
$MemoryStream.Close()
}
}
}
write-host -f Green "List Attachments Copied from '$SourceListName' to '$TargetListName' !"
}
Catch {
write-host -f Red "Error Copying List Attachments!" $_.Exception.Message
}
}
#Set Parameters
$SiteURL= "https://crescent.sharepoint.com/"
$SourceListName="Projects"
$TargetListName="Project Temp"
#Call the function to copy list items
Copy-Attachments -siteURL $SiteURL -SourceListName $SourceListName -TargetListName $TargetListName
Liste Öğeleri Arasındaki Ekleri Kopyalamak için PnP PowerShell
SharePoint Online'da liste öğeleri arasındaki ekleri kopyalamanın PnP PowerShell yolu:
#Parameters
$SiteURL= "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Config"
#Function to copy attachments between list items
Function Copy-SPOAttachments($SourceItem, $TargetItem)
{
Try {
#Get All Attachments from Source
$Attachments = Get-PnPProperty -ClientObject $SourceItem -Property "AttachmentFiles"
$Attachments | ForEach-Object {
#Download the Attachment to Temp
$File = Get-PnPFile -Url $_.ServerRelativeUrl -FileName $_.FileName -Path $env:TEMP -AsFile -force
#Add Attachment to Target List Item
$FileStream = New-Object IO.FileStream(($env:TEMP+"\"+$_.FileName),[System.IO.FileMode]::Open)
$AttachmentInfo = New-Object -TypeName Microsoft.SharePoint.Client.AttachmentCreationInformation
$AttachmentInfo.FileName = $_.FileName
$AttachmentInfo.ContentStream = $FileStream
$AttachFile = $TargetItem.AttachmentFiles.add($AttachmentInfo)
$Ctx.ExecuteQuery()
#Delete the Temporary File
Remove-Item -Path $env:TEMP\$($_.FileName) -Force
}
}
Catch {
write-host -f Red "Error Copying Attachments:" $_.Exception.Message
}
}
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-credential)
$Ctx=Get-PnPContext
#Get Source and Target List Items
$SourceItem = Get-PnPListItem -List $ListName -Id 1
$TargetItem = Get-PnPListItem -List $ListName -Id 4
#Call the function to copy attachments between list items
Copy-SPOAttachments $SourceItem $TargetItem
Liste ekini bir belge kitaplığına kopyalamak istiyorsanız şunu kullanın: SharePoint Online: Eki Listeden Belge Kitaplığına Kopyala