更新列表视图SharePoint PowerShell

更新列表视图SharePoint PowerShell,powershell,listview,sharepoint,sharepoint-2019,splist,Powershell,Listview,Sharepoint,Sharepoint 2019,Splist,我希望能够更新两个不同列表中所有视图的“JSLink”属性。但是,我不断得到以下错误: “集合已修改;枚举操作可能无法执行。” 我有以下PowerShell: Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue #Temp Site $siteColl = "mysitecollectionURL" $site = Get-SPSite $siteColl #JS fil

我希望能够更新两个不同列表中所有视图的“JSLink”属性。但是,我不断得到以下错误:

“集合已修改;枚举操作可能无法执行。”

我有以下PowerShell:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Temp Site
$siteColl = "mysitecollectionURL"

$site = Get-SPSite $siteColl
 
#JS file to add
$jSFile = "clienttemplates.js"

#Lists to update
$masterTasks = "Master Tasks"
$allTasks = "All Tasks"

        Write-Host "`nChecking site:" $site.RootWeb.URL
        
        #Get root web
        $web = $site.RootWeb
        
        #Iterating lists
        foreach($list in $web.Lists)
        {   
            if($list.Title -eq $masterTasks)
            {
                write-host "`n`tMaster Tasks list found"
                
                #Iterating views
                foreach($view in $list.Views)
                {
                        $view.JSLink = $jSFile
                        $view.Update()
                }
            }
            
            if($list.Title -eq $allTasks)
            {
                write-host "`n`tAll Tasks list found"
                
                #Iterating views
                foreach($view in $list.Views)
                {
                        $view.JSLink = $jSFile
                        $view.Update()
                }
            }
        }
        $web.Dispose()
        

Write-Host "`n"

我哪里做错了?如果您有任何建议,我们将不胜感激。

请使用for循环而不是foreach,因为在foreach循环中,无法删除或更新属性:

       $web = $site.RootWeb
    For($i=0; $i -lt $web.Lists.count; $i++)
    {
       if($web.Lists[$i].Title  -eq $masterTasks)
       {
             write-host "`n`tMaster Tasks list found"

           For($j=0; $j -lt $list.Views.Count; $j++)
           {
                    $view=$list.Views[$j]
                    $view.JSLink  = $jSFile
                    $view.Update()
           }
       }

       if($web.Lists[$i].Title  -eq $allTasks)
        {
            write-host "`n`tAll Tasks list found"
    
            #Iterating views
    
           For($k=0; $k -lt $list.Views.Count; $k++)
           {
                    $otherview= $list.Views[$k]
                    $otherview.JSLink  = $jSFile
                    $otherview.Update()
           }
        }

      
    }
 
    
    $web.Dispose()
以下是一个博客,用于指定与解决方案相同的错误消息,请参阅:


这就成功了,非常感谢。。