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

如何使用PowerShell删除SharePoint文件并排除指定文件

解决SharePoint文件删除不生效的问题

问题根源

你的代码逻辑能正确识别待删除文件,但调用$item.DeleteObject()后未提交更改到SharePoint。PnP基于CSOM(客户端对象模型),这类修改操作需要显式执行提交命令才会生效。另外嵌套循环检查排除项的方式效率较低,可优化为哈希表快速匹配。

修正后的代码

$siteurl = "https://sharepoint.com/sites/Some/Sharepoint/Folder"
$username = "AdminAccount"
$securePassword = ConvertTo-SecureString "MuchSecurePassWord" -AsPlainText -Force
$O365Credential = New-Object System.Management.Automation.PsCredential($username, $securePassword)

# 导入排除列表并转为哈希表,提升查找效率
$exclusions = Import-Csv "Downloads\exclusions.txt"
$excludeNames = @{}
foreach ($user in $exclusions) {
    $excludeNames[$user.User] = $true
}
Write-Host "无需删除的文件数量: $($excludeNames.Count)"

Connect-PnPOnline -Url $siteurl -Credentials $O365Credential

$items = Get-PnPFolderItem -FolderSiteRelativeUrl "/Picture Folder/Test" -ItemType File
Write-Host "文件夹内总文件数: $($items.Count)"

foreach ($item in $items) {
    # 检查当前文件名是否在排除列表中
    if (-not $excludeNames.ContainsKey($item.Name)) {
        Write-Host "准备删除: $($item.Name)"
        $item.DeleteObject()
    }
}

# 提交所有删除操作到SharePoint
Invoke-PnPQuery

关键修改点

  • 添加Invoke-PnPQuery:所有CSOM修改操作(比如删除)都需要执行此命令,才能将本地更改同步到SharePoint服务器。
  • 优化排除项检查:使用哈希表存储排除文件名,将嵌套循环的O(n*m)复杂度降为O(n),处理大量文件时更高效。
  • 修正中文引号:原代码中的中文引号“”会导致PowerShell解析错误,统一改为英文双引号""。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:10:23