You need to enable JavaScript to run this app. 如何调整PowerShell脚本为指定SharePoint站点文件应用保留标签
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 07:54:03