0

ユーザー定義変数を見て、その値に一致するリスト内の各項目のエンタープライズ キーワードを更新する powershell スクリプトを作成しようとしています。

たとえば、管理されたメタデータ キーワードを持つ SP のページがあるとします。new、fresh、clean 交換したいキーワードをユーザーに尋ねるスクリプトが必要です。したがって、ユーザーは変数を fresh として指定し、別の変数を fresher として指定すると、キーワード fresh から fresher を持つアイテムが更新されます。

これは私が以前に使用したものですが、複数の値があるため現在は機能しません:

Add-PSSnapin Microsoft.SharePoint.PowerShell -EA SilentlyContinue
$webURL = <MY SP URL>
$listName = <MY LIST NAME>
$web = Get-SPWeb $webURL
$list = $web.Lists[$listName]
$listitems = $list.items 
$session = Get-SPTaxonomySession -Site $web.Site
$termStore = $session.TermStores["Managed Metadata Service"]
$group = $termStore.Groups["Resources"]
$termset = $group.TermSets["Wiki Categories"]
$terms = $termSet.GetTerms(100)
$wiki1 = read-host "Enter the wiki category you want to update"
$wiki2 = read-host "Enter the replacement wiki category"

$term = $terms | ?{$_.name -eq $wiki2}


Foreach($item in $listitems) 
{$wiki = $item["Wiki Categories"]
    if($wiki.label -eq $term) 
    { 
        $spitem = [Microsoft.SharePoint.SPListItem]$item;
    $taxfield = [Microsoft.SharePoint.Taxonomy.TaxonomyField]$spitem.Fields["Wiki Categories"]
        $taxfield.SetFieldValue($spitem, $term)

    $spitem.Update() 
    $spitem.File.Publish("True")
    } 
}

問題はこの行にあると確信しています:

$term = $terms | ?{$_.name -eq $wiki2}

そして、この行:

$taxfield.SetFieldValue($spitem, $term)
4

1 に答える 1

0

問題は、 TaxonomyFieldValueCollectionを渡す必要があるSetFieldValueにTermCollection ($term) を渡すことです。

次のように変換できます。

$taxfield = $spitem.Fields["Wiki Categories"]

$tfvc = new-object -typename Microsoft.SharePoint.Taxonomy.TaxonomyFieldValueCollection -argumentlist $taxfield;

foreach($t in $ term)
{
   $tfv = new-object -typename Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue -argumentlist $taxfield
   $tfv.TermGuid = $t.Id
   $tfv.Label = $t.Name
   $tfvc.Add($tfv)
}
...
$taxfield.SetFieldValue($spitem, $tfvc)
于 2013-01-17T02:26:15.490 に答える