SharePoint doesn’t allow us to delete the site if it has a sub-site inside it. Now think about a situation, if we have a long hierarchy of sub-sites in a site that we wanted to delete, then manually doing this task will take too much time. So, for such a kind of a scenario, I’ve created a PowerShell script that deletes the sub-sites recursively.
Below is the function that deletes the site recursively, by calling itself and deleting if it doesn’t have any children site.
function Delete-ChildWeb($ParentWeb){
if($ParentWeb.Webs.Count -eq 0 -and -not $ParentWeb.IsRootWeb){
Write-Host "Deleting Web '$ParentWeb'"
$ParentWeb.Delete()
}
else{
foreach($childWeb in $ParentWeb.Webs){
Delete-ChildWeb $childWeb
}
if(-not $ParentWeb.IsRootWeb){
Write-Host "Deleting Web '$ParentWeb'"
$ParentWeb.Delete()
}
}
}
The given below script is calling that function to delete the site,
$DeleteSiteCollection = $false
$SiteUrl ="http://spvm/"
if($DeleteSiteCollection){
Remove-SPSite –Identity $SiteUrl –GradualDelete –Confirm:$False
}
else{
$Site = Get-SPSite $SiteUrl
$Web = $Site.RootWeb
Delete-ChildWeb $Web|
Write-Host "Web '$Web' deleted successfully" -ForegroundColor Green
}
If we set the value of the $DeleteSiteCollection object, as true, then it will delete the whole site collection from the content database.
Attached is the full powershell script.
Join the conversation! Your thoughts help the community grow.