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

[玩转系统] 使用 PowerShell 添加或删除内容类型到 SharePoint 列表或库

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

使用 PowerShell 添加或删除内容类型到 SharePoint 列表或库


SharePoint 内容类型使用户能够将相关数据组织在一起。一切都是围绕 SharePoint 中的内容类型构建的,以提供一致性和可重用性。例如,所有列表模板(例如公告和任务)均分别使用内容类型“公告”和“任务”构建!通常,内容类型由模板和元数据列组成。 例如,让我们考虑“销售提案文档”内容类型,它可以使用销售提案模板和捕获其相关元数据的列在网站集中创建,并且可以与任意数量的文档库关联。

默认情况下,内容类型的范围位于网站集级别。当您将内容类型添加到 SharePoint 列表时,它会从网站内容类型库复制到列表,这意味着当您在列表级别自定义内容类型时,它不会影响父内容类型,父内容类型位于网站集级别。

在 OOPS 术语中,您可以将“内容类型”视为类,并将从该内容类型创建的项目视为“对象”

如何将内容类型关联到 SharePoint 库或列表

要将内容类型添加到 SharePoint 中的列表或库,请执行以下操作:

  1. 转到列表/库设置。
  2. 单击常规设置组下的高级设置。
  3. 在内容类型选项上,将其设置为“是”以允许管理内容类型。
  4. 现在,在列表设置页面上,您将找到一个新部分“内容类型”,其中包含列表中所有关联的内容类型。
  5. 您可以单击“从现有网站内容类型添加”链接将任何现有内容类型添加到列表中。

    [玩转系统] 使用 PowerShell 添加或删除内容类型到 SharePoint 列表或库

  6. 在“添加内容类型”页面的“可用网站内容类型”部分中,选择要添加到列表或库的内容类型,单击“添加”,然后单击“确定”。现在新的内容类型出现在设置页面上。

    [玩转系统] 使用 PowerShell 添加或删除内容类型到 SharePoint 列表或库

内容类型和网站栏是分层继承的!因此,如果您创建一个内容类型,它将可供其下的所有子网站使用!

使用 PowerShell 将内容类型添加到 SharePoint 列表:

如果您想要将内容类型关联到多个站点上的多个列表,您可以使用以下 PowerShell 脚本以编程方式执行此操作!就我而言,我的网站有 50 多个子网站。要求是将内容类型添加到所有站点上的特定库。因此,我编写了这个 PowerShell 自定义函数来在 SharePoint 库中添加删除内容类型。


Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Custom PowerShell Function to Add Content type to SharePoint list
Function Add-ContentTypeToList([Microsoft.SharePoint.SPList]$List, $ContentTypeName)
{
    #Check if Content Type Management is enabled
    if($List.ContentTypesEnabled -ne $true)
    {
        Write-Host "Enabling Content type management on list: $($list.Title)"
        $List.ContentTypesEnabled = $true
        $List.Update()
    }

    #Get the content type
    $ContentType = $List.ParentWeb.Site.RootWeb.ContentTypes[$ContentTypeName]

    #If content type found in the site
    if ($ContentType)
    {
        #Check If list doesn't has the specific content type already
        if (-not $list.ContentTypes[$ContentTypeName])
        {
            #Add content type to the list
            $list.ContentTypes.Add($ContentType) | Out-Null
           
            $list.Update()
            Write-Host "Content Type Added to the list: $($List.Title)"
        }
        else
        {
            Write-Host  "Content Type '$($ContentTypeName)' already exists on the list '$($list.Title)'"
        }
    }
    else
    {
        Write-Host  "Cannot find the Content Type '$($ContentTypeName)' to add to list '$($list.Title)'"
    }
}

#Variables for processing
$WebURL ="https://sales.crescent.com"
$ListName ="Q1 Sales Proposal"
$ContentTypeName ="Sales Proposal"

#Get the Web and List
$Web = Get-SPWeb $WebURL
$List = $Web.lists.TryGetList($ListName)

if($list -ne $null)
{
    #Call the function to add content type
    Add-ContentTypeToList $list $ContentTypeName
}

如何从列表中删除内容类型?

要删除您不使用的任何未使用的内容类型,请执行以下操作:

  1. 浏览至“列表设置”或“库设置”页面。
  2. 在“内容类型”部分下,单击要删除的内容类型。
  3. 单击“删除此内容类型”链接,然后在出现确认提示时单击“确定”。

使用 PowerShell 从 SharePoint 列表中删除内容类型

使用此 PowerShell 脚本从 SharePoint 列表或文档库中删除内容类型:


#Custom PowerShell Function to Remove Content type from SharePoint list
Function Remove-ContentTypeFromList([Microsoft.SharePoint.SPList]$List, $ContentTypeName)
{
    #Check if Content Type Management is enabled
    if($List.ContentTypesEnabled -ne $true)
    {
        Write-Host "Enabling Content type management on list: $($list.Title)"
        $List.ContentTypesEnabled = $true
        $List.Update()
    }

    #Get the content to remove from list
    $ContentType = $List.ContentTypes[$ContentTypeName]

    #If content type found in the site
    if ($ContentType)
    {
        #Check If list doesn't has the specific content type already
        if ($list.ContentTypes[$ContentTypeName])
        {
            #Remove content type from the list
            $list.ContentTypes.Delete($ContentType.Id)
            $list.Update()
            Write-Host "Content Type has been removed from the list: $($List.Title)"
        }
        else
        {
            Write-Host  "Content Type '$($ContentTypeName)' doesn't exists on the list '$($list.Title)'"
        }
    }
    else
    {
        Write-Host  "Cannot find the Content Type '$($ContentTypeName)' to add to list '$($list.Title)'"
    }
}

#Variables for processing
$WebURL ="https://sales.crescent.com"
$ListName ="Q1 Sales Proposal"
$ContentTypeName ="Sales Proposal"

#Get the Web and List
$Web = Get-SPWeb $WebURL
$List = $Web.lists.TryGetList($ListName)

if($list -ne $null)
{
    #remove content type from list, call: 
    Remove-ContentTypeFromList $list $ContentTypeName
}

如果已经根据内容类型创建了项目,则您无法删除该内容类型!如果您尝试删除正在使用的内容类型,您最终会收到“内容类型仍在使用中”错误!

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

取消回复欢迎 发表评论:

关灯