function RenameFile([string]$iisserver,[string]$iisCatalog,[string]$oldName,[string]$newName)
{
<#
.SYNOPSIS
Выполняет переименование указанного файла на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisCatalog 
Путь к папке, в которой находится файл

.PARAMETER oldName
Название файла, которого необходимо переименовать

.PARAMETER newName
Новое название файла

.EXAMPLE 
RenameFile -iisserver "iis.server.local" -iisCatalog "C:\inetpub\wwwroot\test" -oldName "old.txt" -newName "new.txt"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FILE_RENAMING -f "$iisCatalog\$oldName",$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisCatalog,
			[string]$oldName,
			[string]$newName
		)
		try
		{
			# Переименовываем файл
			$RenamedFile = Rename-Item -Path "$iisCatalog\$oldName" -NewName $newName -Confirm:$false -ErrorAction Stop;
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisCatalog,$oldName,$newName -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FILE_RENAMED -f "$iisCatalog\$oldName",$iisserver) -ForegroundColor Yellow;
	}	
}

function CopyFiles([string]$iisserver,[string]$iisCatalog,[array]$fileList)
{
<#
.SYNOPSIS
Выполняет копирование указанных файлов в указанный каталог на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisCatalog 
Путь к папке, в которой находится файл

.PARAMETER fileList
Список файлов, который необходимо скопировать в папку

.EXAMPLE 
CopyFiles -iisserver "iis.server.local" -iisCatalog "C:\inetpub\wwwroot\test" -fileList "C:\1.txt","C:\2.txt"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FILE_COPING -f $iisCatalog,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisCatalog,
			[array]$fileList
		)
		try
		{
			# Копируем файлы по очереди. Если происходит ошибка при копировании файла, то копирование прекращается
			foreach($file in $fileList)
			{
				$CopiedFile = Copy-Item $file -Destination $iisCatalog -ErrorAction Stop;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisCatalog,$fileList -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FILE_COPIED -f $iisCatalog,$iisserver) -ForegroundColor Yellow;
	}
}

function DeleteFiles([string]$iisserver,[string]$iisCatalog,[array]$fileList)
{
<#
.SYNOPSIS
Выполняет удаление указанных файлов на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisCatalog 
Путь к папке, в которой находится файл

.PARAMETER fileList
Список файлов для удаления

.EXAMPLE 
DeleteFiles -iisserver "iis.server.local" -iisCatalog "C:\inetpub\wwwroot\test" -fileList "C:\1.txt","C:\2.txt"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FILE_DELETING -f $iisCatalog,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisCatalog,
			[array]$fileList
		)
		try
		{
			# Удаляем файлы по очереди. Если происходит ошибка при удалении файла, то удаление прекращается
			foreach($file in $fileList)
			{
				$DeletedFile = Remove-Item "$iisCatalog\$file" -Confirm:$false -ErrorAction Stop;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisCatalog,$fileList -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FILE_DELETED -f $iisCatalog,$iisserver) -ForegroundColor Yellow;
	}
}

function CreateFTPResource([string]$iisserver, [string]$name, [int]$port, [string]$hostheader, [string]$ipAddress, [string]$physicalPath)
{
<#
.SYNOPSIS
Создает FTP-ресурс с указанными параметрами на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver 
IP-адрес или DNS-имя IIS-сервера

.PARAMETER name 
Название ftp-ресурса

.PARAMETER port 
Номер порта

.PARAMETER hostheader 
Устанавливаемый host header

.PARAMETER ipAddress 
Устанавливаемый IP-адрес. Если необходимо прослушивать все IP-адреса, то необходимо передать значение "*"

.EXAMPLE 
CreateFTPResource -iisserver "iis.server.local" -name "test" -port 80 -hostheader "www.test.local" -ipAddress "*"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_RESOURCE_CREATING -f $name,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$name,
			[int]$port,
			[string]$hostheader,
			[string]$ipAddress,
			[string]$physicalPath
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					
					# Воссоздаем путь к файлам FTP, если он не существует
					if(!(Test-Path $physicalPath))
					{
						$folder = New-Item -Path $physicalPath -ItemType "directory";
					}
					
					# Создаем новый FTP-ресурс
					$FTPResource = New-WebFtpSite -Name $name -IPAddress $ipAddress -Port $port -HostHeader $hostheader -PhysicalPath $physicalPath -ErrorAction Stop;
					$FTPResource = Set-ItemProperty "IIS:\Sites\$name" -Name ftpServer.security.authentication.basicAuthentication.enabled -Value $true -ErrorAction Stop;
					$FTPResource = Set-ItemProperty "IIS:\Sites\$name" -Name ftpServer.security.ssl.controlChannelPolicy -Value SslAllow -ErrorAction Stop;
					$FTPResource = Set-ItemProperty "IIS:\Sites\$name" -Name ftpServer.security.ssl.dataChannelPolicy -Value SslAllow -ErrorAction Stop;
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $name,$port,$hostheader,$ipAddress,$physicalPath -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_RESOURCE_CREATED -f $name,$iisserver) -ForegroundColor Yellow;
	}
}

function RemoveFTPResource([string]$name,[string]$iisserver,[bool]$deleteFiles)
{
<#
.SYNOPSIS
Выполняет удаление указанного FTP-ресурса, включая удаление физически размещенных на нем файлов на указанном IIS-сервере

.DESCRIPTION

.PARAMETER name 
Название FTP-ресурса

.PARAMETER iisserver 
IP-адрес или DNS-имя IIS-сервера

.PARAMETER deleteFiles 
Логическое значение. True - означает удалять физически размещенные файлы на сервере.

.EXAMPLE 
RemoveFTPResource -iisserver "iis.server.local" -name "FTPResource" -deleteFiles $false

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_RESOURCE_DELETING -f $name,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$name,
			[bool]$deleteFiles
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					
					# Получаем директорию, в которой располагаются файлы FTP-ресурса
					$directory = Get-ItemProperty ("IIS:\Sites\" + $name) -Name physicalPath -ErrorAction Stop;
					
					# Удаляем веб-сайт с IIS-сервера
					$Site = Remove-WebSite -Name $name -Confirm:$false -ErrorAction Stop;

					if($deleteFiles)
					{
						# Удаляем физически размещенные файлы на сервере
						$directory = Remove-Item $directory -Recurse -Force -ErrorAction Stop;
					}
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $name,$deleteFiles -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_RESOURCE_DELETED -f $name,$iisserver) -ForegroundColor Yellow;
	}
}

function AssignPermissions([string]$iisserver,[string]$iisSiteName,[string]$iisPath,[string]$login,[string]$ftpPermissions,[string]$ftpAccessType)
{
<#
.SYNOPSIS
Задает права доступа на файл в указанный каталог на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisPath
Путь к папке или файлу

.PARAMETER ftpPermissions
Список прав доступа для файла или папки

.PARAMETER ftpAccessType
Тип правила (разрешающее или запрещающее), допустимые значения Allow и Deny

.EXAMPLE 
AssignPermissions -iisserver "iis.server.local" -iisSiteName test -login testuser -iisPath "C:\inetpub\wwwroot\test" -ftpPermissions "Read,Write" -ftpAccessType Allow
AssignPermissions -iisserver "iis.server.local" -iisSiteName test -login testuser -iisPath "C:\inetpub\wwwroot\test" -ftpPermissions "Read" -ftpAccessType Deny
.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_RESOURCE_PERMISSIONS_ASSIGNING -f $iisPath,$iisSiteName,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisSiteName,
			[string]$iisPath,
			[string]$login,
			[string]$ftpPermissions,
			[string]$ftpAccessType
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					
					$Root = Get-Item "IIS:\Sites\$iisSiteName";
					$ACL = Get-Acl $Root.physicalPath;
					
					$rules = $ACL.Access | Where-Object { $_.IdentityReference -eq $login};
					
					# Удаляем ранее назначенные права пользователя
					if($rules -ne $null -and $rules.Length -ne 0)
					{
						foreach ($rule in $rules)
						{
							if($rule -ne $null)
							{
								$ACL.RemoveAccessRule($rule);
							}
						}
					}
					
					# Добавляем запрашиваемое правило
					$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($login,$ftpPermissions, "ContainerInherit, ObjectInherit", "None", $ftpAccessType);
					$ACL.AddAccessRule($rule);
					
					# Удаляем все записи в веб-конфиге для указанного пользователя
					Clear-WebConfiguration -Filter ("//System.FtpServer/Security/Authorization/add[@users='$login']") -PSPath "IIS:\Sites" -Location "$iisSiteName" -ErrorAction Stop;
					# Устанавливаем права доступа на файл или папку
					
					$WebConfig = Add-WebConfiguration -Filter "/System.FtpServer/Security/Authorization" -Value (@{AccessType=$ftpAccessType; Users=$login; Permissions=$ftpPermissions}) -PSPath "IIS:\Sites" -Location "$iisSiteName" -ErrorAction Stop;
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisSiteName,$iisPath,$login,$ftpPermissions,$ftpAccessType -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_RESOURCE_PERMISSIONS_ASSIGNED -f $iisPath,$iisSiteName,$iisserver) -ForegroundColor Yellow;
	}
}

function ClearPermissionsForEveryoneOnRoot([string]$iisserver,[string]$iisSiteName)
{
<#
.SYNOPSIS
Задает права доступа на файл в указанный каталог на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver
IP-адрес или DNS-имя IIS-сервера

.EXAMPLE 
ClearPermissionsForEveryoneOnRoot -iisserver "iis.server.local" -iisSiteName test

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_RESOURCE_PERMISSIONS_СLEARING -f $iisSiteName,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisSiteName
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					# Удаляем все записи в веб-конфиге для указанного пользователя
					Clear-WebConfiguration -Filter ("//System.FtpServer/Security/Authorization/add[@users='*']") -PSPath "IIS:\Sites" -Location "$iisSiteName" -ErrorAction Stop;
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisSiteName -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_RESOURCE_PERMISSIONS_СLEARED -f $iisSiteName,$iisserver) -ForegroundColor Yellow;
	}
}

function CreateException($exInfo)
{
	$ex = New-Object -TypeName $exInfo.ExceptionType -ArgumentList $exInfo.Message;
	return $ex;
}

function CreateFilePath([string]$iisserver,[string]$iisCatalog, [string]$siteName, [string]$domainName, [string]$login)
{
<#
.SYNOPSIS
Создает FTP-ресурс с указанными параметрами на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver 
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisCatalog 
Путь к папке, которую необходимо создать на сервере

.EXAMPLE 
CreateFilePath -iisserver "iis.server.local" -iisCatalog "C:\test"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_PATH_CREATING -f $iisCatalog,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$iisCatalog,
			[string]$siteName,
			[string]$domainName,
			[string]$login
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					
					# Воссоздаем путь к файлам FTP, если он не существует
					if(!(Test-Path $iisCatalog))
					{
						$folder = New-Item -Path $iisCatalog -ItemType "directory";
					}
					
					# Создаем виртуальную директорию для логина
					$virtualDirectory = New-Item "IIS:\Sites\$siteName\$domainName\$login" -type VirtualDirectory -physicalPath $iisCatalog;
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $iisCatalog,$siteName,$domainName,$login -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_PATH_CREATED -f $iisCatalog,$iisserver) -ForegroundColor Yellow;
	}	
}

function DeleteFilePath([string]$iisserver, [string]$siteName, [string]$domainName, [string]$login)
{
<#
.SYNOPSIS
Удаляет FTP-папку с указанными параметрами на указанном IIS-сервере

.DESCRIPTION

.PARAMETER iisserver 
IP-адрес или DNS-имя IIS-сервера

.PARAMETER iisCatalog 
Путь к папке, которую необходимо удалить с сервера, удаляется папка и её содержимое

.EXAMPLE 
DeleteFilePath -iisserver "iis.server.local" -siteName "Root" -domainName "CLIENT-TEST" -login "testuser"

.NOTES
#>
	# $PasswordObj = ConvertTo-SecureString –String $password –AsPlainText -Force -ErrorAction Stop;
	# $UserCredential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $login,$PasswordObj -ErrorAction Stop;

	Write-Host ($MSG_FTP_PATH_DELETING -f $login,$iisserver);
	$ExitObj = Invoke-Command -ComputerName $iisserver -ScriptBlock {
		param
		(
			[string]$siteName,
			[string]$domainName,
			[string]$login
		)
		try
		{
			$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
			$state = $mtx.WaitOne(60000);
			if($state)
			{
				try
				{
					if(!(Get-Module WebAdministration -ErrorAction:SilentlyContinue))
					{
						Import-Module WebAdministration
					}
					
					if(Test-Path "IIS:\Sites\$siteName\$domainName\$login")
					{
						$virtualDirectory = Get-WebVirtualDirectory -Site $siteName -Name "$domainName/$login";
						
						# Удаляем папку FTP (рекурсивно со всеми вложенными файлами и папками, а также скрытые файлы и папки, и файлы и папки только для чтения), если он не существует
						if(Test-Path $virtualDirectory.physicalPath)
						{
							Remove-Item -Path $virtualDirectory.physicalPath -Force -Recurse -ErrorAction Stop;
						}
						
						# Удаляем виртуальную директорию
						$virtualDirectory = Remove-Item "IIS:\Sites\$siteName\$domainName\$login" -Confirm:$false -Force -Recurse;
					}
				}
				catch 
				{
					throw $_.Exception;
				}
				finally
				{
					$state = $mtx.ReleaseMutex();
				}
			}
			else
			{
				throw $MSG_CONFIG_FILE_LOCKED;
			}
		}
		catch
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value $_.Exception.Message;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value $_.Exception.GetType().FullName;
			return $returnedException;
		}
		return $null;
		
	} -ArgumentList $siteName,$domainName,$login -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_FTP_PATH_DELETED -f $login, $iisserver) -ForegroundColor Yellow;
	}
}

function ReadPath($server, $configPath, $сatalogPath)
{
<#
.SYNOPSIS
Считывает из файла с расположением $configPath путь к каталогу на указанном IIS-сервере и создает полный путь

.DESCRIPTION

.PARAMETER iisserver 
IP-адрес или DNS-имя IIS-сервера

.EXAMPLE 
ReadPath -server 172.21.41.134 -configPath "C:\Backup.config" -сatalogPath "CLIENT-TEST\ot"

.NOTES
#>
	$Root = Invoke-Command -ComputerName $server -ScriptBlock ${function:ReadPathInternal} -ArgumentList $configPath,$сatalogPath;
	return $Root;
}

function ReadPathInternal($configPath, $сatalogPath)
{
	$mtx = New-Object System.Threading.Mutex($false, "IISSyncMutex");
	$state = $mtx.WaitOne(60000);
	if($state)
	{
		try
		{
			$FileExists = Test-Path -Path $configPath;
			$Root = "";
			if($FileExists)
			{
				$Root = Get-Content -Path $configPath -TotalCount 1;
			}
			if([string]::IsNullOrEmpty($Root))
			{
				$Root = "C:\";
			}
			
			$ResultPath = "$Root\$сatalogPath";
			
			if(!(Test-Path $ResultPath))
			{
				$Folder = New-Item -Path $ResultPath -ItemType "directory";
			}
		}
		catch 
		{
			throw $_.Exception;
		}
		finally
		{
			$state = $mtx.ReleaseMutex();
		}
	}
	else
	{
		throw $MSG_CONFIG_FILE_LOCKED;
	}
	return $ResultPath;
}