当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 在 SharePoint 列表之间复制列表项

作者:精品下载站 日期:2024-12-14 14:04:33 浏览:14 分类:玩电脑

使用 PowerShell 在 SharePoint 列表之间复制列表项


要求:使用 PowerShell 在 SharePoint 列表之间复制列表项
我们的一个 SharePoint 列表(称为“新闻”)已过度增长,希望定期将其内容存档到另一个列表。

[玩转系统] 使用 PowerShell 在 SharePoint 列表之间复制列表项

解决方案:因此任务是在 SharePoint 列表之间复制列表项。让我们使用 PowerShell 来实现它。

重要提示:两个列表应该具有相同的列!因此,将源列表保存为模板并从中创建一个新列表。

用于复制列表项的 PowerShell 脚本:

您想在两个 SharePoint 列表之间复制项目吗?也许您有一个测试项目列表,并且您希望将数据从一个列表迁移到另一个列表,而无需手动输入所有数据。本文将向您展示如何使用 PowerShell 在 SharePoint 列表之间复制项目。


#Configuration variables
$WebURL = "https://intranet.crescent.com"
$SourceListName = "News"
$TargetListName= "NewsArchive"

#Get Objects
$web = Get-SPWeb $WebURL
$SourceList = $web.Lists[$SourceListName]
$TargetList = $web.Lists[$TargetListName]

#Get all source items
$SourceColumns = $sourceList.Fields
$SourceItems = $SourceList.GetItems();

#Iterate through each item and add to target list
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();
}

在列表之间复制附件:

如果您想复制带有附件的列表项,请使用以下脚本:


#Configuration variables
$WebURL = "https://intranet.crescent.com"
$SourceListName = "News"
$TargetListName= "NewsArchive"

#Get Objects
$web = Get-SPWeb $WebURL
$SourceList = $web.Lists[$SourceListName]
$TargetList = $web.Lists[$TargetListName]

#Get all source items
$SourceColumns = $sourceList.Fields
$SourceItems = $SourceList.GetItems();

#Iterate through each item and add to target list
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()

    #Copy Attachments
    Foreach($Attachment in $SourceItem.Attachments)
    {
        $spFile = $SourceList.ParentWeb.GetFile($SourceItem.Attachments.UrlPrefix + $Attachment)
        $TargetItem.Attachments.Add($Attachment, $spFile.OpenBinary())
    }
}

如果列名不同怎么办?


$SourceItems = $SourceList.items
foreach ($SourceItem in $SourceItems) 
{
    write-host -foregroundcolor yellow Copying Item: $SourceItem["Title"]
    $TargetItem = $TargetList.AddItem()
    $TargetItem["Title"] = $SourceItem["Title-Column"]
    $TargetItem["Another-Field"] = $SourceItem["Another-Field"]
    $TargetItem.update()
}

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯