Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Ярослав_Остапчук@vk,
Код: Выделить весь код
<#

.SYNOPSIS

Конфигурирование Internet Connection Sharing.

.EXAMPLE

ICS -List
ICS -External 1 -Internal 2
ICS -External 1 -Disable
ICS.ps1 -External "Internet" -Internal "Local Network" -Name
ICS.ps1 -List | Where {$_.SharingEnabled} | Foreach {ics.ps1 -External $_.Index -Disable}
#>

param (
		#Индекс внешнего интерфейса
		$External,
		#Индекс внутреннего интерфейса
		$Internal,
		#Отображать ли список интерфейсов
		[switch]$List,
		#Отключить ICS
		[switch]$Disable,
		#Задать имя вместо индекса
		[switch]$Name
	  )

#Включить или отключить ICS на заданном интерфейсе
Function Set-ConnectionSharing($netint,$type)
{
	switch($netint)
	{
		#Отключить ICS
		{$_.SharingEnabled -eq $true -and $Disable} {$_.DisableSharing();break}
		{$_.SharingEnabled -eq $true} {"Internet Connection Sharing is enabled";break}
		#Включить ICS
		{$_.SharingEnabled -eq $false –and !$Disable} {$_.EnableSharing($type);break}
		{$_.SharingEnabled -eq $false –and $Disable} {"Internet Connection Sharing is disabled";break}
		default {"Interface not found" }
	}
}

Function Get-InetInterface
{
	$netint = @()
	foreach ($i in $hnet.EnumEveryConnection)
	{
		$netconprop = $hnet.NetConnectionProps($i)
		$inetconf = $hnet.INetSharingConfigurationForINetConnection($i)
		$netint += New-Object PsObject -Property @{
				Index = $index
				Guid = $netconprop.Guid
				Name = $netconprop.Name
				DeviceName = $netconprop.DeviceName
				Status = $netconprop.Status
				MediaType = $netconprop.MediaType
				Characteristics = $netconprop.Characteristics
				SharingEnabled = $inetconf.SharingEnabled
				SharingConnectionType = $inetconf.SharingConnectionType
				InternetFirewallEnabled = $inetconf.InternetFirewallEnabled
				}
		$index++
	}
	$netint
}

#SHARINGCONNECTIONTYPE - для внешнего интерфейса
New-Variable -Name public -Value 0 -Option Constant
#SHARINGCONNECTIONTYPE - для внутреннего интерфейса
New-Variable -Name private -Value 1 -Option Constant
#Счетчик
New-Variable -Name index -Value 1
#Создаем ComObject типа HNetCfg.HNetShare.1
$hnet = New-Object -ComObject HNetCfg.HNetShare.1
#Отображает список доступных интерфейсов

if ($List)
{
	Get-InetInterface
}

else
{
	 #Получаем индекс по заданному интерфейсу
	 If ($Name -and ($External -or $Internal))
	 {
	 	$allint = Get-InetInterface
		$External = $allint | Where-Object {$_.Name -eq $External} | Select-Object -ExpandProperty Index
		$Internal = $allint | Where-Object {$_.Name -eq $Internal} | Select-Object -ExpandProperty Index

	 }
	 #Получаем список всех доступных интерфейсов и присваиваем переменной
	 $netint = $hnet.EnumEveryConnection | foreach {$hnet.INetSharingConfigurationForINetConnection($_)}
	 if ($External -and $Internal)
	 {
		 Set-ConnectionSharing $netint[$External-1] $public
		 Set-ConnectionSharing $netint[$Internal-1] $private
     }
	 elseif ($External)
	 {
	 	Set-ConnectionSharing $netint[$External-1] $public
	 }
	 elseif ($Internal)
	 {
	 	Set-ConnectionSharing $netint[$Internal-1] $private
	 }
	 else {"Parameters not set"}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:44, 24-02-2013 | #4