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.