SharementCollection对象的Sharepoint Online 2013 CSOM构造函数错误?

时间:2013-06-28 20:03:14

标签: sharepoint powershell csom

我正在编写一个脚本,用于在sharepoint在线服务器上将项目从一个列表复制到另一个列表。我正在使用2013 sharepoint客户端对象模型(CSOM)在PowerShell ISE中编写脚本。这应该是一项简单的任务,但事实恰恰相反。到目前为止,我可以使用camlquery来检索所有项目,我只是想将这些项目及其附件复制到另一个列表中。我收到的错误是尝试建立一个attachmentCollection来检索任何项目中的所有附件,这里是代表问题的脚本的一部分:

Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

$siteURL = "https://mysite.sharepoint.com"
$password = Read-Host -Prompt "Enter Password" -AsSecureString
$ctx = New-Object Microsoft.Sharepoint.Client.ClientContext($siteURL)
$credentials = New-Object Microsoft.Sharepoint.Client.SharepointOnlineCredentials("admin@mysite.sharepoint.com", $password)
$ctx.Credentials = $credentials


#...Bunch of code that establishes/loads web/lists/items, all works fine
function CopyItem $itemToCopy


function CopyItem ($oldItem)
{
    Write-Host "Copying item" $oldItem.ID
    $newItemCI = New-Object Microsoft.SharePoint.Client.ListItemCreationInformation
    $newItem = $archList.AddItem($newItemCI)
    $ctx.load($newItem)
    #Update fields
    $ctx.load($sourceList.Fields)
    $ctx.ExecuteQuery()
    foreach($field in $sourceList.Fields)
    {
        $newItem[$field.InternalName] = $oldItem[$field.InternalName]
    }
    $attachments = New-Object Microsoft.SharePoint.Client.AttachmentCollection  #ERROR HERE
    $attachments = $oldItem.AttachmentFiles
    $ctx.load($attachments)
    $newItem.AttachmentFiles.Add($attachments)
    $newItem.Update()
    $ctx.load($newItem)
    $ctx.ExecuteQuery()
}

错误消息显示:“List Archive Failed at:with this error message:找不到构造函数。找不到类型为Microsoft.SharePoint.Client.AttachmentCollection的适当构造函数。”

如果我尝试创建新对象作为附件,我也会得到相同的错误,找不到构造函数。这很奇怪,因为构造函数应该在client.dll中,但没有运气。我甚至尝试修复我的2013 CSOM文件,没有发现错误。感谢您的任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

在经历了大量的反复试验之后,我发现在处理attachmentCollection对象时你不需要声明一个新对象。你可以简单地设置一个变量:

$attachments = $item.AttachmentFiles

$ attachments现在是一个附件对象数组。

但是,复制/添加附件到新项目仍然存在很大问题,因为sharepoint有一个可怕的系统来管理这些附件,并且最初没有用于存储它们的文件夹,也不能直接创建文件夹。我仍然无法在项目之间复制附件,如果有人知道如何实现这一点,我也会喜欢这方面的帮助。

向AttachmentFiles属性添加附件的主要问题是它使用$ item.AttachmentFiles.Add()方法,该方法要求参数为AttachmentCreationInformation对象,而不是附件对象。我不知道如何制作这个功能,以便我可以为新项目添加预先存在的附件。