You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SP2019本地环境删除含子站点的SharePoint站点的脚本优化问题

SharePoint 2019本地环境站点批量删除脚本优化方案

以下脚本同时覆盖你提到的两个需求,可通过开关切换模式:

  • 开启递归模式:自动从最底层子站点开始删除,再删除父站点
  • 关闭递归模式:捕获删除失败错误,将原因写入列表指定列,不中断其他站点删除

前置准备

  • 在你的待删除站点列表中新增一个单行文本类型的列,列名为错误信息,用于存储删除失败的原因
  • 测试阶段请先保留删除命令的注释,确认输出的删除顺序符合预期后再取消注释

优化后完整脚本

#========================================================================#
#                       批量删除已确认的站点                             #
#========================================================================#

# 功能开关:设置为$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:18:01