Cambios no confirmados en el objeto SPWeb
-
10-12-2019 - |
Pregunta
En mi secuencia de comandos simple de Powershell, sigo recibiendo el error "Excepción al llamar a" ResetRoleInheritance ":Hay cambios no confirmados en el objeto SPWEb, llame a SPWeb.Update() para confirmar los cambios antes de llamar a este método".
Estoy intentando restablecer todos los subsitios con permisos heredados como preparación para limpiar los permisos de nuestros TeamSites.¿Dónde debería colocar SPWeb.Update() en el siguiente código?
$spWeb = Get-SPWeb "http://<sitecollection>/<subsite>/"
Echo "Resetting Permission Inheritance for Site: $spWeb"
$spWeb.ResetRoleInheritance()
$spWeb.Update()
foreach($subSite in $spWeb.Webs)
{
Echo "Resetting Permission Inheritance for SubSite: $subSite"
$subSite.ResetRoleInheritance()
$subSite.Update()
$subSite.Dispose()
}
$spWeb.Dispose()
Solución
This works... for some reason. I have no idea why, really. It most definately could be cleaned up i'm sure as well:
$spWeb = Get-SPWeb "http://<site collection>/<subsite>/"
Echo "Resetting Permission Inheritance for Site: $spWeb"
foreach($subSite in $spWeb.Webs)
{
$subSite.Update()
Echo "Resetting Permission Inheritance for SubSite: $subSite"
$subSite.ResetRoleInheritance()
$subSite.Update()
$subSite.Dispose()
}
$spWeb.ResetRoleInheritance()
$spWeb.Update()
$spWeb.Dispose()
Otros consejos
Estaba cansado de lidiar con este problema, así que lo solucioné buscando cada SPWeb individualmente, usando una lista de URL como string
formación.Algo como esto:
$urls = (Get-SPWeb "http://<site collection>/<subsite>/").webs | select -exp url
(copiar y pegar URL hacia/desde un archivo de texto en una nueva sesión de PowerShell)
# this is now a brand new SPWeb object each time. to be absolutely sure im not causing the afore-mentioned errors
$urls | foreach { $web = get-spweb $_; $web.resetroleinheritance(); $web.dispose() }
Probablemente no sea una gran solución para scripts automatizados, pero me ayudó a superar el límite.