2013-07-02 2 views
0

Я пытаюсь использовать 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 было бы весьма признателен.

ответ

1

У вас неправильный синтаксис для вызова статического метода. Вы хотите [Microsoft.SharePoint.Client.File]::OpenBinaryDirect(...)

Обратите внимание на синтаксис double colons :: между именем типа и именем метода. То же самое для вызова SaveBinaryDirect.

Смежные вопросы