Powershell 获取sharepoint网站中正在使用的术语集名称

Powershell 获取sharepoint网站中正在使用的术语集名称,powershell,sharepoint,sharepoint-2013,Powershell,Sharepoint,Sharepoint 2013,我的任务是获取所有站点中基于术语(列表项中的MMS列的值不为空)使用的MMS术语集,以便只有这些MMS术语集可以迁移到其他sharepoint环境。在基本层面上,我使用下面的脚本 $FieldCollection= (Get-SPWeb https:/sharepoint.com/sites/pssl/mgmt).Lists.Fields $MetadataField = New-Object psobject $MetadataField | Add-Member -MemberTy

我的任务是获取所有站点中基于术语(列表项中的MMS列的值不为空)使用的MMS术语集,以便只有这些MMS术语集可以迁移到其他sharepoint环境。在基本层面上,我使用下面的脚本

    $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;

但它只返回列表中定义的托管元数据列,而不返回列表中正在使用的元数据列。有人能帮我完成这项任务吗

我不是Sharepoint API方面的专家,但我正在努力了解问题所在,以帮助您,但我无能为力

我注意到,在循环之前创建一个对象
$MetadataField
,然后创建一个副本
$MetadataField |选择object*
,然后添加一个数组

正如您所说,返回的对象应该只包含
ParentListUrl
ParentListTitle
FieldTitle
FieldId
列,这是我从上面的示例中所期望的。你能详细说明你在找什么吗?也许可以将整个函数更新到您的问题中,并发布您返回的期望值。这样我可以试着帮你

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

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

New-Object -Type PSObject -Property $hash
另外,如果您的函数直接返回每个找到的项,而无需额外处理,那么您可以跳过在数组中添加它们,只需像我在示例中所做的那样写入输出。更清楚地说,如果我在一个函数中围绕我的示例放置一个循环并执行,那么我将获得一个记录集,该记录集具有Property1和Property2的自定义对象