После удалении коллекции сайтов SharePoint средствами PowerShell через команду Remove-SPSite было написано, что все окей. Правда при попытке создать SPSite с таким же именем выдавалось сообщение о том, что такое имя уже используется. Задав в PowerShell команду Get-SPSite, я обнаружил, что моя коллекция сайтов до сих пор в списке.
При попытке зайти на страницу удаляемой коллекции сайтов и получал ошибку 404 – страница не найдена. В ULS-логах ничего мне понятного не было. В любом случае, я хотел удалить SPSite, а не понять, почему он не работает.

Продолжил экспериментировать с командами в PowerShell, пытаясь заменить URL коллекции сайтов на GUID.

 

$ss = Get-SPSite -Identity https://spdev/mytempSite 
Remove-SPSite -Identity $ss.ID

 

В результате получил сообщение об ошибке:
Remove-SPSite : Не удалось завершить эту операцию.
Повторите попытку.
At line:1 char:14
+ Remove-SPSite <<<<  -Identity $ss.ID
    + CategoryInfo          : InvalidData: (Microsoft.Share... mdletRemoveSite:
   SPCmdletRemoveSite) [Remove-SPSite], SPException
    + FullyQualifiedErrorId : Microsoft.SharePoint. PowerShell.SPCmdletRemoveSiTe
Попробовал воспользоваться командой Remove-SPDeletedSite также через идентификатор, но тоже была ошибка, что не получается найти SPSite с моим идентификатором:

Remove-SPDeletedSite -Identity $ss.ID

 

Снова ошибка:

Remove-SPDeletedSite : Cannot find an SPDeletedSite object with Id or Url: …..

 

С решением проблемы помог один очень малоизвестный метод ForceDeleteSite.Он позволяет удалить из базы данных информацию о коллекции сайтов. Недостаток этого метода – он не удаляет никакие артефакты из файловой системы, так что этот метод только на крайний случай.

$site = Get-SPSite http://siteurl 
$siteId = $site.Id 
$siteDatabase = $site.ContentDatabase 
$siteDatabase.ForceDeleteSite( $siteId, $false, $false)

 

Теперь немного подробней о методе:

public void ForceDeleteSite( Guid siteId, bool gradualDelete, bool restorable )

Входящие параметры: идентификатор коллекции сайтов, $true или $false для включения параметра gradualDelete (если надо удалить сразу, то ставьте $false), $true или $false для возможности восстановления (рекомендую сразу $false).