SharePoint 2010-如果列表是从ListTemplate创建的,那么如何从列表中获取列表模板名称

时间:2019-06-24 10:21:31

标签: sharepoint sharepoint-2010 sharepoint-listtemplate list-template

我们在共享点中创建了一些列表模板,并使用列表模板创建了列表。这是示例,

ListTemplates

  1. ListTemplate1
  2. ListTemplate2
  3. ListTemplate3

按照以下方式创建的列表,

List1是使用ListTemplate1创建的
List2是使用ListTemplate2创建的
List3是使用ListTemplate3创建的

后来用户使用ListTemplate1创建了List4,

现在,我们正在尝试确定哪个模板由哪个模板创建。但是我们无法正确识别列表模板。它总是在少数网站集合中作为ListTemplate1出现,而ListTemplate2是少数网站集合

有人可以帮助我获取列表的正确列表模板名称吗?

下面是我用来获取特定列表的列表模板的Powershell代码。

$sourceWebURL = "WebUrl"
$sourceListName = "listname"

$spSourceWeb = Get-SPWeb $sourceWebURL
$spSourceList = $spSourceWeb.Lists[$sourceListName]
$spSourceList.TemplateFeatureId

2 个答案:

答案 0 :(得分:0)

请尝试这种方法,就我而言,它返回了正确的列表模板



    if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
        Add-PSSnapin "Microsoft.SharePoint.PowerShell";
    }

    $_URL = "URL";
    $SPWeb = Get-SPWeb $_URL;

    $SPList = $SPWeb.Lists["LIST_NAME"];
    $listTemplate = $SPWeb.ListTemplates | ? {$_.FeatureId -eq $SPList.TemplateFeatureId};
    $listTemplate.Name;
    $listTemplate.FeatureId;

让我知道是否有帮助

*更新* 这是一个小脚本,可以从Web获取所有模板



     if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) {
        Add-PSSnapin "Microsoft.SharePoint.PowerShell";
    }

    $_URL = "[URL]";
    $SPWeb = Get-SPWeb $_URL;

    foreach($templates in $SPWeb.ListTemplates){
        $templates.Name;
        $templates.FeatureId;
        $templates.InternalName;
        $templates.SchemaXml;
    }

您可以做的是检查这3个模板的属性是否不存在(检查其他道具,不仅检查我在脚本中提到的道具,还可以始终检查$ tempplate对象以获取全部道具)是否不同。也许FeatureId相同,但是还要检查SchemaXml中的featureId,也许有所不同。如果所有属性都相同,您可以为第一个模板使用此featureId(例如'temp1')更新第二个模板的'description'属性,并使用值'temp2'更新第二个模板,以此类推。之后,您可以检查从列表中获取的模板是否始终具有相同的描述。可能是一样的,如果是,那么我的下一个方法是尝试更新featureId,但是请注意,这不是推荐的方法,并且可能会产生一些错误。也许更好的主意是尝试在某些开发环境中重现该错误,然后尝试通过更改featureId修复该错误。

还可以检查列表中的SPExport和SPImport,以尝试导出这些列表并在某些开发环境中将其导入,并尝试在那里解决此问题。

答案 1 :(得分:0)

示例脚本以获取模板名称供您参考。

$sourceWebURL = "http://sp10/"
$sourceListName = "ListBasedonTemplate1"

$spSourceWeb = Get-SPWeb $sourceWebURL
$spSourceList = $spSourceWeb.Lists[$sourceListName]
$spSourceList.TemplateFeatureId
$listTemplate=$spSourceWeb.Site.GetCustomListTemplates($spSourceWeb) | ? {$_.FeatureId -eq $spSourceList.TemplateFeatureId}
$listTemplate[0].Name