如何用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就方便多了。

相关推荐
vipxieliang20 小时前
ValidX 的 Date 和 DateTime vs JPA 的 Temporal 对比
java·后端
触底反弹20 小时前
🔥 从「为什么」到「怎么用」:TypeScript 类型约束与泛型完全指南
后端·面试·typescript
用户83562907805120 小时前
使用 Python 查找和替换 Word 文档中的文本
后端·python
Java编程爱好者20 小时前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
后端
神奇小汤圆20 小时前
从 ☕️Java Spring Boot → 🦀Rust Axum 体验的真实感受
后端
掘金者阿豪21 小时前
Codex 开放 1M 上下文后,我折腾了一圈才发现:新版根本不是网上教的那样配置
后端
爱勇宝21 小时前
《道德经》第 10 章:真正成熟的人,能成事但不控制一切
前端·后端·程序员
六边形6661 天前
独立开发不知道做什么?使用 TRAE Work 抓取差评痛点,快速跑通产品立项流
前端·后端·面试
高频因子挖掘机1 天前
量化交易系统的数据层和策略层如何解耦?从紧耦合泥潭到优雅分层架构
后端·github
临江仙4551 天前
同一个 AI Agent 如何同时服务 Web、微信和 QQ:PureChat 的渠道架构实践
前端·人工智能·后端