# Аргументы командной строки
Param(
	[Parameter(Mandatory=$True)]
	[string]$WebUrl, # URL-адрес веб-узла, в котором существует целевой список
	[Parameter(Mandatory=$True)]
	[string]$ListTitle # Display Name
)

$MSG_LINE = "--------------------------------------------------------------------"

function StartProcess
{
	# Загружаем SharePoint плагин для PowerShell
	Write-Host $MSG_LINE
	Write-Host "Загружаем модуль PowerShell для работы с SharePoint..." 
	Add-PSSnapin Microsoft.SharePoint.PowerShell
	Write-Host "Модуль PowerShell для работы с SharePoint загружен" -ForeGroundColor Green
	
	Write-Host $MSG_LINE
	Write-Host "Получение объекта Web по адресу $WebUrl"
	$web = Get-SPWeb $WebUrl -ErrorAction Stop
	Write-Host "Объект Web получен" -ForeGroundColor Green
	Write-Host $MSG_LINE

	$list = $web.Lists[$ListTitle]

	if($list -eq $null)
	{
		Write-Host "Список $ListTitle не найден" -ForeGroundColor Red
	}
	else
	{
		Write-Host "Список $ListTitle найден. Выполняем удаление элементов" -ForeGroundColor Green

		$attemps = 10;
		$countItems = 1;
		
		do
		{
			$countItems = TryCleanListItems;
			$attemps--;
		}
		while ($countItems -gt 0 -and $attemps -gt 0);
		
		if($countItems -eq 0)
		{
			Write-Host "Все элементы списка $ListTitle успешно удалены" -ForeGroundColor Green
		}
		else
		{
			Write-Host "В списке $ListTitle остались элементы" -ForeGroundColor Red
		}
	}

	$web.Dispose()
}

function TryCleanListItems()
{
	$list.Update()
	
	$items = $list.Items
	$n = $items.Count
	
	for($i = $n - 1; $i -ge 0; $i--)
	{
		Try
		{
			Write-Host ("Удаление элемента с идентификатором " + $items[$i].ID) -ForeGroundColor Yellow
			$items[$i].Delete();
		}
		Catch [System.Exception]
		{
			Write-Host $_.Message -ForeGroundColor Red
		}
	}
	
	return $items.Count;
}

StartProcess