【问题标题】:How to update SharePoint enterprise keywords with multiple values using powershell?如何使用 powershell 更新具有多个值的 SharePoint 企业关键字?
【发布时间】:2013-02-27 06:11:49
【问题描述】:

我正在尝试编写一个 powershell 脚本,该脚本查看用户定义的变量并更新列表中与该值匹配的每个项目的企业关键字。

例如,假设您在 SP 中有一个页面,其中包含托管元数据关键字:new、fresh、clean 我想要一个脚本来询问用户他们想要换出什么关键字。因此,用户可以指定一个变量为:fresh,另一个变量为:fresher,它会将任何带有关键字fresher 的项目更新为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)

【问题讨论】:

  • 在 www.qipoint.com 上有一个工具可以做到这一点

标签: sharepoint powershell


【解决方案1】:

问题是您将TermCollection ($term) 传递给SetFieldValue,您应该在其中传递TaxonomyFieldValueCollection

你可以像这样转换它们:

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

【讨论】:

  • 这是否发生在它自己的 foreach 之前的 $item for each 或 inside?​​span>
  • '...' 之前的部分将 $term 中的多个值转换为不同的集合类型 ($tfvc),因此可以在 foreach 之前对所有项目执行一次。然后将第二个参数替换为$taxfield.SetFieldValue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2014-07-14
  • 1970-01-01
  • 2013-01-27
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多