如何用PnP Powershell实现search term(labels)功能

今天要说的是一个古老的技巧,CSOM时代的非物质文化遗产

大家知道,taxonomy是SharePoint内容管理的核心功能,一个term可以设置多个标签(label),你在原生的SharePoint界面可以直接搜索term(无论命中的是哪个标签)。

但是PnP Powershell却没有一个现成的命令去搜索term,只有Get-PnPTerm pnp.github.io/powershell/... 这个命令只会根据default label来找,不会看其他标签。

你要是想自己写个遍历,去拿所有的terms以及term里所有的标签,这样也很费事(你要遍历所有的children terms) 所以有没有更加简便的方法?

CSOM时代的遗老 LabelMatchInformation

PnP Powershell不支持search term的根本原因是Modern SharePoint的开发框架就没开放这个search term的接口。大家要实现这个功能需要使用古老的csom(Client Side Object Model),里面有个LabelMatchInformation类用来匹配term里的label,从而实现搜索term的功能

这个类是在Microsoft.SharePoint.Client.Taxonomy.dll 里的,以前CSOM时代写PowerShell还要先加载dll(Add-Type),不过现在PnP Powershell启动的时候已经帮你加载好了,我们可以直接用起来.

它生成的时候需要SharePoint Context作为参数

powershell 复制代码
$ctx=Get-PnPContext
$match = [Microsoft.SharePoint.Client.Taxonomy.LabelMatchInformation]::new($ctx)
$ts=Get-PnPTermSet -Identity  "Country" -TermGroup "Site Collection"

$match.TermLabel = "CN"
$match.StringMatchOption = "StartsWith"
$match.DefaultLabelOnly = $false
$match.ResultCollectionSize = 20
$match.TrimUnavailable = $true
$match.Lcid = 1033

$terms = $ts.GetTerms($match)
$ctx.Load($terms)
$ctx.ExecuteQuery()

这里的$match.StringMatchOption有两种选项,StartsWith 以及 ExactMatch (你可以跑[Microsoft.SharePoint.Client.Taxonomy.StringMatchOption].GetEnumNames()命令自己查看) DefaultLabelOnly为true的话就不会命中其他子标签了

我的示例里用CN作为China的别名

如果找不到的话,就会返回空集合

注意,$match.TrimUnavailable这个属性一定得设置,不然就报错

这是命中很多个term的示例

这样,在Powershell里实现search term就方便多了。

相关推荐
EatFan1 分钟前
我为什么把患者与病例从 1:1 改成 1:N?一次真实数据库模型重构记录
数据库·后端·重构·健康医疗·全栈
wno70425 分钟前
Spring Boot整合MongoDB
spring boot·后端·mongodb
GreenTea32 分钟前
🔥别再用压缩了,Codex、NVIDIA、DeepSeek、Uber 给出 Agent 上下文管理的新答案
前端·后端·算法
码事漫谈42 分钟前
全球最聪明的几个人,本周突然一起说“别卷了”
后端
IT_陈寒44 分钟前
React重渲染这坑,我跳进去又爬出来了
前端·人工智能·后端
gis开发之家1 小时前
Spring Boot 4 定时任务与异步线程池:从 @Scheduled 到高并发任务编排(生产级实战)
java·spring boot·后端·wpf·spring boot4
mldong2 小时前
Python 开发者也有自己的轻量工作流引擎了:pip install 一行,5 分钟跑通一条审批流
后端·python·架构
怕浪猫9 小时前
FDE 如何正确解决现场项目工程性的问题
前端·后端·ai编程
GreenTea10 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法