Я пытаюсь использовать powershell и Sharepoint 2013 CSOM для копирования вложений одного элемента в новый элемент в другом списке. Я смог успешно создать папку вложений для нового элемента, поэтому теоретически все, что мне нужно сделать, это переместить файлы из старой папки вложений в новую. CopyTo и MoveTo работают только для перемещения файлов в списке, поэтому я решил использовать OpenBinaryDirect и SaveBinaryDirect с контекстом сайта. Однако в powershell при вызове любого из этих методов возникает следующая ошибка: вызвано вызов метода, потому что [System.RuntimeType] не содержит метода с именем «OpenBinaryDirect».Sharepoint CSOM OpenBinaryDirect в Powershell, метод не найден
$attachments = $item.AttachmentFiles
if($attachments.Count -gt 0)
{
#Creates a temporary attachment for the new item to genereate a folder, will be deleted later.
$attCI = New-Object Microsoft.SharePoint.Client.AttachmentCreationInformation
$attCI.FileName = "TempAttach"
$enc = New-Object System.Text.ASCIIEncoding
$buffer = [byte[]] $enc.GetBytes("Temp attachment contents")
$memStream = New-Object System.IO.MemoryStream (,$buffer)
$attCI.contentStream = $memStream
$newItem.AttachmentFiles.Add($attCI)
$ctx.load($newItem)
$sourceIN = $sourceList.Title
$archIN = $archList.Title
$sourcePath = "/" + "Lists/$sourceIN/Attachments/" + $item.Id
$archPath = "/" + "Lists/$archIN/Attachments/" + $newItem.Id
$sFolder = $web.GetFolderByServerRelativeUrl($sourcePath)
$aFolder = $web.GetFolderByServerRelativeURL($archPath)
$ctx.load($sFolder)
$ctx.load($aFolder)
$ctx.ExecuteQuery()
$sFiles = $sFolder.Files
$aFiles = $aFolder.Files
$ctx.load($sFiles)
$ctx.load($aFiles)
$ctx.ExecuteQuery()
foreach($file in $sFiles)
{
$fileInfo = [Microsoft.SharePoint.Client.File].OpenBinaryDirect($ctx, $file.ServerRelativeUrl)
[Microsoft.Sharepoint.Client.File].SaveBinaryDirect($ctx, $archPath, $fileInfo.Stream, $true)
}
}
$ctx.ExecuteQuery()
Любая помощь в получении либо методы BinaryDirect работать или просто обобщенная стратегия для копирования вложений через списки с помощью PowerShell + CSOM было бы весьма признателен.