获取sharepoint站点中使用的术语集名称

时间:2017-04-17 15:04:02

标签: powershell sharepoint sharepoint-2013

我的任务是根据所有网站中的条款(不是列表项目中的MMS列的空值)来获取正在使用的MMS术语集,以便只有那些MMS术语集可以迁移到另一个共享点环境。在基础级别我正在使用脚本

    $FieldCollection= (Get-SPWeb https:/sharepoint.com/sites/pssl/mgmt).Lists.Fields 
$MetadataField = New-Object psobject
$MetadataField | Add-Member -MemberType NoteProperty -Name "ParentListUrl" -value ""
$MetadataField | Add-Member -MemberType NoteProperty -Name "ParentListTitle" -value ""
$MetadataField | Add-Member -MemberType NoteProperty -Name "FieldTitle" -value ""
$MetadataField | Add-Member -MemberType NoteProperty -Name "FieldId" -value ""

$matches = @();
foreach($field in $FieldCollection)
{
    if($field.GetType().Name -ne "TaxonomyField"){
        continue;
    }
    #if($field.TermSetId.ToString() -ne $TermSet.Id.ToString()){continue;}
    $tf = $MetadataField | Select-Object *;
    $tf.ParentListUrl = $field.ParentList.ParentWeb.Url;
    $tf.ParentListTitle = $field.ParentList.Title;
    $tf.FieldTitle = $field.Title;
    $tf.FieldId = $field.ID;

    $matches += $tf;
}
return $matches;

但它只返回列表中定义的托管元数据列,但不会在列表中使用它们。任何人都可以帮助我完成任务。

1 个答案:

答案 0 :(得分:0)

我不是Sharepoint API的专家,但我试图了解问题是什么,以帮助您,我不能。

我注意到你在循环之前创建了一个对象$MetadataField,然后创建一个副本$MetadataField | Select-Object *,然后添加一个数组。

正如您所说,返回的对象应该只有ParentListUrlParentListTitleFieldTitleFieldId的列,这是我对上面示例的期望。你能详细说明你在寻找什么吗?也许将整个功能更新到您的问题中并发布您返回的期望。这样我就可以帮你了。

顺便说一句,;不是必需的,您应该在循环中创建对象的新实例。您可以使用相同的方法或首先创建驱动自定义对象属性的哈希键。例如,在循环中调整以下内容。

$hash=@{
   Property1="Value1"
   Property2="Value2"
}

New-Object -Type PSObject -Property $hash

此外,如果您的函数直接返回每个找到的项目而无需额外处理,那么您可以跳过将它们添加到数组中,并像在我的示例中一样写入输出。为了更清楚,如果我在函数中执行循环并执行,那么我将获得带有Property1和Property2的自定义对象的记录集