You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell或自动化工具批量删除SharePoint中未使用的共享链接?

批量删除SharePoint中未使用的外部共享链接(PowerShell实现)

前置条件

在执行脚本前,请确保满足以下要求:

  • 安装 PnP PowerShell 模块(SharePoint Online管理的常用工具):
    Install-Module -Name PnP.PowerShell -Force -AllowClobber
    
  • 拥有目标SharePoint站点的站点集管理员权限,或具备管理共享链接的足够权限。
  • 使用支持交互式登录的账号(需MFA的账号也可通过交互式方式验证)。

完整PowerShell脚本

该脚本会:

  1. 连接到指定SharePoint站点
  2. 筛选出所有外部共享链接
  3. 检查链接的最后访问时间(超过指定天数则判定为未使用)
  4. 批量删除符合条件的链接
# 配置参数
$siteUrl = "https://contoso.sharepoint.com/sites/YourTargetSite" # 替换为你的站点URL
$unusedThresholdDays = 90 # 设定未使用天数阈值,例如90天
$logFilePath = ".\DeletedSharingLinks.log" # 日志文件路径

# 初始化日志文件
"[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 开始执行批量删除未使用共享链接任务" | Out-File $logFilePath -Append

try {
    # 连接到SharePoint站点
    Write-Host "正在连接到站点:$siteUrl" -ForegroundColor Cyan
    Connect-PnPOnline -Url $siteUrl -Interactive

    # 获取所有包含外部共享链接的文件和文件夹
    Write-Host "正在检索所有外部共享链接..." -ForegroundColor Cyan
    $sharedItems = Get-PnPSiteListItem -List "Documents" -Query "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='SharedWithUsers' /><Value Type='Boolean'>True</Value></Eq></Where></Query></View>"

    $deletedCount = 0

    foreach ($item in $sharedItems) {
        # 获取当前项目的所有共享链接
        $sharingLinks = Get-PnPSharingLink -List "Documents" -Identity $item.Id -IncludeUsageInformation

        foreach ($link in $sharingLinks) {
            # 筛选外部共享链接且超过未使用阈值的链接
            if ($link.IsExternal -and $link.LastAccessedDateTime) {
                $daysSinceLastAccess = (Get-Date) - $link.LastAccessedDateTime
                if ($daysSinceLastAccess.TotalDays -ge $unusedThresholdDays) {
                    try {
                        # 删除共享链接
                        Remove-PnPSharingLink -List "Documents" -Identity $item.Id -Token $link.Token -Force
                        $deletedCount++
                        "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 已删除链接:$($link.Link) | 最后访问时间:$($link.LastAccessedDateTime)" | Out-File $logFilePath -Append
                        Write-Host "已删除未使用链接:$($link.Link)" -ForegroundColor Green
                    }
                    catch {
                        "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 删除失败:$($link.Link) | 错误信息:$($_.Exception.Message)" | Out-File $logFilePath -Append
                        Write-Host "删除链接失败:$($link.Link),错误:$($_.Exception.Message)" -ForegroundColor Red
                    }
                }
            }
            # 处理从未被访问过的链接(LastAccessedDateTime为空)
            elseif ($link.IsExternal -and !$link.LastAccessedDateTime) {
                try {
                    Remove-PnPSharingLink -List "Documents" -Identity $item.Id -Token $link.Token -Force
                    $deletedCount++
                    "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 已删除从未被访问的链接:$($link.Link)" | Out-File $logFilePath -Append
                    Write-Host "已删除从未被访问的链接:$($link.Link)" -ForegroundColor Green
                }
                catch {
                    "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 删除失败:$($link.Link) | 错误信息:$($_.Exception.Message)" | Out-File $logFilePath -Append
                    Write-Host "删除链接失败:$($link.Link),错误:$($_.Exception.Message)" -ForegroundColor Red
                }
            }
        }
    }

    "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 任务完成,共删除$deletedCount个未使用外部共享链接" | Out-File $logFilePath -Append
    Write-Host "任务完成,共删除$deletedCount个未使用外部共享链接,详情请查看日志:$logFilePath" -ForegroundColor Cyan
}
catch {
    "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] 脚本执行出错:$($_.Exception.Message)" | Out-File $logFilePath -Append
    Write-Host "脚本执行出错:$($_.Exception.Message)" -ForegroundColor Red
}
finally {
    # 断开连接
    Disconnect-PnPOnline
}

脚本说明

  1. 参数配置:
    • $siteUrl:替换为你要操作的SharePoint站点URL
    • $unusedThresholdDays:设置判定为"未使用"的天数(例如90天未访问则删除)
    • $logFilePath:日志文件保存路径,记录删除成功/失败的链接信息
  2. 核心逻辑:
    • 使用Get-PnPSiteListItem检索所有已共享的文件/文件夹
    • 通过Get-PnPSharingLink -IncludeUsageInformation获取链接的访问统计数据
    • 筛选出外部共享链接,判断是否超过未使用阈值或从未被访问
    • 调用Remove-PnPSharingLink批量删除符合条件的链接
  3. 日志记录:所有操作都会写入日志文件,方便后续核查

注意事项

  • 测试先行:建议先在测试站点或小范围内测试脚本,可在Remove-PnPSharingLink命令后添加-WhatIf参数预览删除操作,避免误删重要链接。
  • 权限验证:确保登录账号拥有足够权限,否则会出现删除失败的情况。
  • 大站点优化:如果站点文件数量极大,可添加分页逻辑或按库分批处理,避免超时或性能问题。
  • 数据备份:执行删除前建议对重要文件/链接进行备份,防止不可逆操作。

内容的提问来源于stack exchange,提问作者Elvis Osman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:12:30