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.