2017-04-17 10 views
0

すべてのサイトで用語に基づいて使用されている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; 

の下に使用していますが、それは、リストに定義されているだけで管理されたメタデータ列を返しますが、彼らは、リストで使用されているではありません。誰でも私がその仕事を達成するのを助けることができますか?

答えて

0

私はSharepoint APIの専門家ではありませんが、私は問題があなたを助けることを理解しようとしていますし、できません。

ループの前にオブジェクト$MetadataFieldを作成した後、レプリカを作成して$MetadataField | Select-Object *を作成してから配列を追加することに気付きました。

あなたが言うように、返されるオブジェクトは、私が上記のサンプルから期待するものであるParentListUrlParentListTitleFieldTitleFieldIdの列を持っている必要があります。あなたはあなたが探しているものについてもっと詳しく説明できますか?たぶんあなたの質問に関数全体を更新し、返された期待を投稿してください。このように私はあなたを助けようとすることができます。

Btwでは、;は不要で、ループ内でオブジェクトの新しいインスタンスを作成する必要があります。同じ方法を使用するか、最初にカスタムオブジェクトのプロパティを駆動するハッシュキーを作成することができます。たとえば、ループ内で次のように調整します。

[email protected]{ 
    Property1="Value1" 
    Property2="Value2" 
} 

New-Object -Type PSObject -Property $hash 

あなたは余分な処理せずに直接各見つかった項目を返しますが機能している場合も、あなたは配列にそれらを追加スキップすることができ、私は私の例で行うようにちょうど出力に書き込みます。もっと明確にするために、関数の中に私のサンプルの周りにループを置いて実行すると、Property1とProperty2のカスタムオブジェクトでレコードセットを取得します

関連する問題