Ярослав_Остапчук@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"}
}