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

function AddIPAddress([string]$adapterName,[string]$IPAddress,[string]$mask,[string]$computer)
{
<#
.SYNOPSIS
Добавляет IPv4-адрес к сетевому адаптеру для указанного компьютера
.DESCRIPTION

.PARAMETER adapterName 
Название сетевого адаптера

.PARAMETER IPAddress 
IPv4 адрес, который необходимо назначить сетевому адаптеру

.PARAMETER mask 
Маска подсети

.PARAMETER gateway 
Шлюз по умолчанию

.PARAMETER dnsservers 
Список DNS-серверов

.PARAMETER computer 
IP-адрес или DNS-имя компьютера, у которого изменяются настройки сетевого адаптера 

.EXAMPLE 
AddIPAddress -computer "iis.server.local" -adapterName Ethernet -IPAddress "192.168.1.2" -mask "255.255.255.0" -gateway "192.168.1.1" -dnsservers "192.168.1.1"

.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_IPADDRESS_ADDING -f $IPAddress,$adapterName,$computer);
	$ExitObj = Invoke-Command -ComputerName $computer -ScriptBlock {
		param
		(
			[string]$adapterName,
			[string]$IPAddress,
			[string]$mask
		)

		# Добавляем IPv4 адрес к указанному сетевому интерфейсу.
		$result = netsh interface ipv4 add address name=$adapterName address=$IPAddress mask=$mask;
		# Если ошибка, генерируем исключение
		if($LASTEXITCODE -ne 0)
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value ($result -join ' ');
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value "System.Exception";
			return $returnedException;
		}
		
		return $null;

	} -ArgumentList $adapterName,$IPAddress,$mask -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_IPADDRESS_ADDED -f $IPAddress,$adapterName,$computer) -ForegroundColor Yellow;
	}
}

function DeleteIPAddress([string]$adapterName,[string]$IPAddress,[string]$computer)
{
<#
.SYNOPSIS
Добавляет IPv4-адрес к сетевому адаптеру для указанного компьютера
.DESCRIPTION

.PARAMETER adapterName 
Название сетевого адаптера

.PARAMETER IPAddress 
IPv4 адрес, который необходимо назначить сетевому адаптеру

.PARAMETER gateway 
Шлюз по умолчанию

.PARAMETER dnsservers 
Список DNS-серверов

.PARAMETER computer 
IP-адрес или DNS-имя компьютера, у которого изменяются настройки сетевого адаптера

.EXAMPLE 
DeleteIPAddress -computer "iis.server.local" -adapterName Ethernet -IPAddress "192.168.1.2" -gateway "192.168.1.1" -dnsservers "192.168.1.1"

.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_IPADDRESS_DELETING -f $IPAddress,$adapterName,$computer);
	$ExitObj = Invoke-Command -ComputerName $computer -ScriptBlock {
		param
		(
			[string]$adapterName,
			[string]$IPAddress
		)

		# Удаляем IPv4 адрес из настроек указанного сетевого интерфейса. Также удаляем шлюз.
		$result = netsh interface ipv4 delete address name=$adapterName address=$IPAddress;
		# Если ошибка, генерируем исключение
		if($LASTEXITCODE -ne 0)
		{
			$returnedException = New-Object PSObject;
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name Message -Value ($result -join ' ');
			Add-Member -InputObject $returnedException -MemberType NoteProperty -Name ExceptionType -Value "System.Exception";
			return $returnedException;
		}
		
		return $null;

	} -ArgumentList $adapterName,$IPAddress -ErrorAction Stop;
	
	if($ExitObj -ne $null) 
	{
		throw (CreateException -exInfo $ExitObj);
	}
	else
	{
		Write-Host ($MSG_IPADDRESS_DELETED -f $IPAddress,$adapterName,$computer) -ForegroundColor Yellow;
	}
}