修復此腳本的可行性如何?PowerShell - 枚舉整個集合並更改集合
是的,我正在改變foreach循環中的集合,這就是這個錯誤的原因。
通過集合枚舉時發生錯誤:集合被修改;枚舉操作可能不會執行.. 在C:\用戶\用戶\文檔\ PowerShell的\ ChangeAllListsV2.ps1:47字符:20 +的foreach < < < <(在$ webLists $列表) + CategoryInfo:InvalidOperation:(微軟.Share ...上+ SPEnumerator:SPEnumerator)[],RuntimeException的 + FullyQualifiedErrorId:BadEnumeration
#Script change in all lists the required field property "testfield" to false
#Part 0 - Configuration
$urlWebApp = "http://dev.sharepoint.com"
$countFound = 0
$countList = 0
$countFoundAndChange = 0
#Part 1 - PreScript
$snapin = Get-PSSnapin | Where-Object {$_.Name -eq "Microsoft.SharePoint.Powershell"}
if ($snapin -eq $null)
{
Write-Host 「Loading SharePoint Powershell」
Add-PSSnapin Microsoft.SharePoint.Powershell
}
#Part 2 - Script
$webApp = Get-SPWebApplication $urlWebApp
#$webApp | fl
$webAppSites = $webApp.sites
foreach($site in $webAppSites)
{
Write-Host "***********************************************************************"
Write-Host "Found site: " $site -foreground blue
$siteAllWebs = $site.AllWebs
foreach($web in $siteAllWebs)
{
Write-Host "Found web: " $web -foreground blue
#$web | fl
$webLists = $web.Lists
foreach($list in $webLists)
{
$countList ++
Write-Host "Found list: " $list -foreground blue
#Change list property
$field = $Null
$field = $list.Fields["testfield"]
if($field){
Write-Host "Field found: " $list -foreground green
#Write-Host "in web: " $web -foreground green
$countFound ++
try{
if($field.Required)
{
#######################################################
$field.Required = $False
$field.Update()
#######################################################
$field = $Null
Write-Host "Done!: Change list: " $list -foreground green
$countFoundAndChange ++
}else{
Write-Host "Already!: Change list: " $list -foreground green
}
}
catch{
$field = $Null
Write-Host "Error!: Change list: " $list -foreground red
Write-Host "in web: " $web -foreground red
$_
}
}
}
}
}
Write-Host "Found lists: " $countList
Write-Host "Found lists with column [testfield]: " $countFound
Write-Host "Change lists with column [testfield]: " $countFoundAndChange
您的意思是像$ webAppSites = $ webApp.sites?我複製每個集合,之後我使用foreach – LaPhi
@LaPhi:不,不是那樣的。你在談論的只是一項任務,而不是複製。我更新了我的答案,以顯示數組如何被複制。 – Gebb
整個網站的深層複製並不是最好的想法。常規的'for'循環是要走的路。 – Servy