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()
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
scroll top