如何调整PowerShell脚本为指定SharePoint站点文件应用保留标签
修改核心思路
- 原脚本仅对指定文件夹对象本身设置保留标签,未遍历文件夹内的文件项,需新增递归遍历文件ListItem的步骤,批量对文件应用相同标签
- 清理原脚本中语法错误、冗余的连接与上下文初始化代码,PnP PowerShell已封装好CSOM上下文,无需手动创建ClientContext
适配后的完整脚本
# 连接目标站点,替换为实际站点URL,Interactive为交互式登录,也可换为证书/应用登录参数 Connect-PnPOnline -Url "https://<tenant>.sharepoint.com/sites/<你的站点名>" -Interactive # 配置参数 $listName = "Documents" # 文档库默认名称为Documents $complianceLabel = "My Label" # 需与Purview合规门户的标签名完全一致 # 目标根文件夹的服务器相对路径,需带站点前缀,示例为站点下的Shared Documents/My Shared Documents $targetFolderRelativeUrl = "/sites/<你的站点名>/Shared Documents/My Shared Documents" # 保留原有逻辑:给整个文档库设置默认标签 Set-PnPLabel -List $listName -Label $complianceLabel # 递归获取目标文件夹下的所有ListItem,包含所有文件、子文件夹及子文件夹内的所有项 $allItems = Get-PnPListItem -List $listName -FolderServerRelativeUrl $targetFolderRelativeUrl -Recurse foreach ($item in $allItems) { # 仅对文件项应用标签 if ($item.FileSystemObjectType -eq [Microsoft.SharePoint.Client.FileSystemObjectType]::File) { # 与原有文件夹打标签的逻辑完全一致,调用NoHold方法 $item.SetComplianceTagWithNoHold($complianceLabel) } # 如需保留原有子文件夹打标签的逻辑,取消下方注释即可 # elseif ($item.FileSystemObjectType -eq [Microsoft.SharePoint.Client.FileSystemObjectType]::Folder) { # $item.SetComplianceTagWithNoHold($complianceLabel) # } } # 批量提交所有修改,提升执行性能 Invoke-PnPQuery Write-Host "标签应用完成"
注意事项
- 替换脚本中
<tenant>、<你的站点名>为实际租户、站点信息,若处理OneDrive站点,将站点URL替换为对应OneDrive地址即可 - 权限要求:执行账号需拥有站点的编辑及以上权限,同时具备合规标签的分配权限
- 若文件夹内文件数量较多,建议先分批测试,避免一次性提交过多修改触发CSOM阈值
- 若使用的PnP PowerShell版本较早不支持
-Recurse参数,可自行实现递归遍历子文件夹的逻辑 - 标签名称必须与Purview合规门户中配置的名称完全匹配,否则会报标签不存在的错误
内容的提问来源于stack exchange,提问作者Marios Konstantinou
相关产品推荐
相关产品推荐

