SPWeb 对象上未提交的更改
-
10-12-2019 - |
题
在我的简单 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() }
对于自动化脚本来说可能不是一个很好的解决方案,但它让我越过了界限。