微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CSOM PowerShell 从 SharePoint 中删除多个文件

如何解决CSOM PowerShell 从 SharePoint 中删除多个文件

我的 PowerShell 脚本循环遍历目录中的每个文件,如果文件丢失/已更改,则将其上传到 SharePoint Online。一切正常,现在我想从 SharePoint 中删除无关文件以获得真正的同步功能。正如用户在其他 post 中提到的,我在尝试使用 DeleteObject() 后收到此错误

The collection was modified. Enumeration operation may not execute.

这是我的代码

$List = $Context.Web.Lists.GetByTitle($library)
$ListItems = $List.GetItems($Query)
$Context.Load($ListItems)
$Context.ExecuteQuery()

$SPfiles = @()
#Iterate through each document in the library
ForEach($ListItem in $ListItems) {
  $Data = New-Object -TypeName PSObject -Property ([Ordered] @{
    FileName  =   $ListItem.FieldValues["FileLeafRef"]
  })
  if ( -not(Test-Path -Path "$local_dir\$($Data.FileName)")) {
    $ListItem.DeleteObject()
    $Context.ExecuteQuery()
    Continue
  }
  $SPfiles += $Data
}

如何删除 SharePoint 文件(最好在此循环中),或者我是否必须在每次 DeleteObject() 调用后编写另一个循环并查询/执行 $ListItems 变量?

解决方法

不要使用 foreach 循环删除项目,而是使用 for 循环。

for ($i = $ListItems.Count-1; i >= 0; i--){
 $ListItems[i].DeleteObject()
 $Context.ExecuteQuery()
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。