SP2019本地环境删除含子站点的SharePoint站点的脚本优化问题
以下脚本同时覆盖你提到的两个需求,可通过开关切换模式:
- 开启递归模式:自动从最底层子站点开始删除,再删除父站点
- 关闭递归模式:捕获删除失败错误,将原因写入列表指定列,不中断其他站点删除
前置准备
- 在你的待删除站点列表中新增一个单行文本类型的列,列名为
错误信息,用于存储删除失败的原因 - 测试阶段请先保留删除命令的注释,确认输出的删除顺序符合预期后再取消注释
优化后完整脚本
#========================================================================# # 批量删除已确认的站点 # #========================================================================# # 功能开关:设置为$true则自动递归删除所有子站点,设置为$false则不自动删子站点,遇到删除失败直接记录错误 $enableRecursiveDelete = $true # 递归删除站点及所有子站点的函数 function Remove-SPWebRecursive { param( [Parameter(Mandatory=$true)] [string]$SiteUrl ) # 先获取当前站点对象 $currentWeb = Get-SPWeb $SiteUrl -ErrorAction Stop # 先遍历删除所有子站点 foreach ($childWeb in $currentWeb.Webs) { Write-Host "正在删除子站点:$($childWeb.Url)" Remove-SPWebRecursive -SiteUrl $childWeb.Url $childWeb.Dispose() } # 子站点删完后删除当前站点 Write-Host "正在删除站点:$($currentWeb.Url)" # 测试阶段请先注释下面这行 Remove-SPWeb -Identity $currentWeb.Url -Recycle -Confirm:$false -ErrorAction Stop $currentWeb.Dispose() } function deleteSites ($url, $listName) { $web = Get-SPWeb $url $list = $web.Lists[$listName] $items = $list.Items | Where-Object {$_['Status'] -eq 'Delete'} Write-Host "列表 $($list.Title) 共有 $($items.Count) 个待删除站点" foreach ($item in $items) { $siteURL = $item["URL"] $siteOwner = $item["SiteOwner"] Write-Host "`n处理站点:$siteURL 站点负责人:$siteOwner" try { if ($enableRecursiveDelete) { # 递归删除模式 Remove-SPWebRecursive -SiteUrl $siteURL } else { # 非递归模式,直接删当前站点 Write-Host "正在删除站点:$siteURL" # 测试阶段请先注释下面这行 Remove-SPWeb -Identity $siteURL -Recycle -Confirm:$false -ErrorAction Stop } # 删除成功更新列表状态 $item["Status"] = "DELETED" $item["错误信息"] = "" $item.Update() Write-Host "站点 $siteURL 删除成功" } catch { # 捕获所有错误,写入列表 $errorMsg = $_.Exception.Message $item["错误信息"] = $errorMsg $item.Update() Write-Host "站点 $siteURL 删除失败,原因:$errorMsg" # 不抛出异常,继续处理下一个站点 continue } } $web.Dispose() } # 加载SharePoint PowerShell插件 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue # 配置参数 $Site = '[你的站点列表所在的站点URL]' $list = "[你的待删除站点列表名称]" deleteSites $Site $list
关键适配说明
SP2019本地环境获取子站点不需要用SPOnline的$ChildSites属性,直接通过SPWeb对象的Webs属性即可获取当前站点下的所有直接子站点,递归调用即可实现全层级子站点删除,完全兼容SP2019本地部署环境。
内容的提问来源于stack exchange,提问作者Riley
相关产品推荐
相关产品推荐

