Вопрос

в моем простом скрипте PowerShell, я продолжаю получать ошибку «исключение, вызывающую« ретритетролейтериальность »: существуют незаметные изменения в объекте SPWEB, вызовите SPWEB.Update () для совершения Cahnges перед вызовом этого метода."

Я пытаюсь сбросить все субзиты с унаследованными разрешениями при подготовке очистки разрешений для наших командных сайтов.Где я должен поместить spweb.update () в следующем коде?

$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()
.

Это было полезно?

Решение

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()

Другие советы

Я устал иметь дело с этим вопросом, поэтому я повернул его, выбрав каждую SPWEB индивидуально, используя список URLS в качестве массива string.Что-то вроде этого:

$urls = (Get-SPWeb "http://<site collection>/<subsite>/").webs | select -exp url
.

(копирование и вставьте URL-адреса в / из текстового файла в новую сессию 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() }
.

, вероятно, не отличное решение для автоматизированных сценариев, но он получил меня по линии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top