如何使用PowerShell删除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
相关产品推荐
相关产品推荐

