在我的简单 Powershell 脚本中,我不断收到错误“调用“ResetRoleInheritance”的异常:SPWEb 对象上有未提交的更改,请在调用此方法之前调用 SPWeb.Update() 提交更改。”

我正在尝试重置具有继承权限的所有子网站,以准备清理我们的 TeamSites 的权限。我应该在以下代码中将 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 来解决这个问题,使用 url 列表作为 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归因
scroll top