Настраиваем сетевые параметры Windows с PowerShell (IP адрес, DNS, шлюз, маршруты)

В Windows вы можете управлять настройками сетевых адаптеров не только из графического интерфейса, но из командной строки PowerShell. В этой статье мы рассмотрим основные командлеты, которые позволяют узнать текущий адрес сетевого адаптера, назначить статический IP адрес, DNS сервера, или настроить сетевой интерфейс на получение конфигурации IP от DHCP сервера . Вы можете использовать эти командлеты для настройки сети как в Windows 10/11, так и в Windows Server (или версии Sever Core ), в Hyper-V Server , для изменения настроек IP сетевых адаптеров на удаленных компьютерах, и в PowerShell скриптах.

В предыдущих версиях в Windows для управления сетевыми настройками из cmd использовалась из CLI использовалась команда netsh . В PowerShell 3.0 и выше для управления сетевыми настройками Windows можно использовать встроенный PowerShell модуль NetTCPIP .

Чтобы получить список командлетов в этом модуле, выполните:

get-command -module NetTCPIP

модуль powershell NetTCPIP для управления сетевыми настройками в windows

В этот модуль также входит командлет Test-NetConnection , который можно использовать для проверки доступности TCP портов на удаленных компьютерах.

Управление сетевыми адаптерами в Windows из PowerShell

Выведите список доступных сетевых интерфейсов в Windows:

Get-NetAdapter

Командлет возвращает имя интерфейса, состояние (Up/Down), MAC адрес, скорость на порту.

В этом примере у меня на компьютере несколько сетевых адаптеров (кроме физического подключения Ethernet и WiFi есть несколько сетевых интерфейсов от Hyper-V и VMWare Player).

Чтобы вывести только активные физические сетевые интерфейсы:

Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}

Get-NetAdapter

Можно вывести только определенные параметры сетевых адаптеров, например: имя, скорость, состояние и MAC адрес:

Get-NetAdapter |Select-Object name,LinkSpeed,InterfaceOperationalStatus,MacAddress

powershell получить mac адрес сетевых адаптеров и скорость подключения

В Windows могут присутствовать скрытые сетевые адаптеры . Чтобы вывести их все, добавьте параметр IncludeHidden :

Get-NetAdapter –IncludeHidden

Команда вернет в том числе все виртуальные WAN Miniport адаптеры, которые используются для различных типов подключений включая VPN. Перезапуск этих адаптеров часто позволяет решить некоторые ошибки VPN подключений с помощью встроенного клиента Windows. Для управления сетевыми подключениями VPN доступны отдельные команды PowerShell .

Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец ifIndex). В нашем примере, чтобы выбрать физический LAN адаптер Intel 82574L нужно набрать команду:

Get-NetAdapter -Name Ethernet0

или

Get-NetAdapter -InterfaceIndex 8

Get-NetAdapter выбрать сетевое подключене по имени или индексу

Можно изменить имя адаптера:

Rename-NetAdapter -Name Ethernet0 -NewName LAN

Чтобы выключить сетевой интерфейс, используйте команды:

Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter

При включении интерфейса нельзя указать его индекс, т.к. он не присвоен. Включите адаптер по его имени:

Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"

Disable-NetAdapter - включить/отключить сетевой интерфейс

Если для сетевого адаптера настроен номер VLAN , можно вывести его так:

Get-NetAdapter | ft Name, Status, Linkspeed, VlanID

Получить информацию об драйвере сетевого адаптера:

Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName

Get-NetAdapter получить версию драйвера сетевого адаптера

Информация о физических параметров подключения сетевых адаптерах (PCI слот, шина и т.д.).

Get-NetAdapterHardwareInfo

Вывести настройки IP сетевого подключения с PowerShell

Получить текущие настройки сетевого интерфейса (IP адрес, DNS, шлюз):

Get-NetIPConfiguration -InterfaceAlias Ethernet0

Get-NetIPConfiguration настройка сетевого интерфейса Ethernet0

Чтобы вывести более подробную информацию о конфигурации сетевого интерфейса, используйте команду:

Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed

В этом случае выводится назначенный профиль сети интерфейса (NetProfile.NetworkCategory), настройки MTU (NetIPv4Interface.NlMTU), включено ли получение адреса от DHCP (NetIPv4Interface.DHCP) и ряд другой полезной информации.

Get-NetIPConfiguration настройки сети

Вывести все IPv4 адреса интерфейсов Windows:

Get-NetIPAddress -AddressFamily ipv4|ft

Получить значение только IP адрес интерфейса:

(Get-NetAdapter -Name ethernet0 | Get-NetIPAddress).IPv4Address

Получить текущие настройки стека TCP на компьютере можно с помощью команды:

Get-NetTCPSetting

Многие администраторы замечают, в Windows Server 2019 с ролью Hyper-V скорость копирования файлов на ВМ очень низкая . В этом случае решить проблемы помогает возврат параметров стека TCP, к настройкам которые использовались в Windows Server 2016:

Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled

Вывести список сетевых протоколов, которые можно включить/отключить для сетевого адаптера:

Get-NetAdapterBinding -Name ethernet -IncludeHidden -AllBindings

Get-NetAdapterBinding сетевые протоколы, включенные для сетевого адаптера

Name                           DisplayName                                        ComponentID          Enabled_x000D_----                           -----------                                        -----------          -------_x000D_Ethernet                       File and Printer Sharing for Microsoft Networks    ms_server            True_x000D_Ethernet                       NetBIOS Interface                                  ms_netbios           True_x000D_Ethernet                       Microsoft LLDP Protocol Driver                     ms_lldp              True_x000D_Ethernet                       Microsoft NDIS Capture                             ms_ndiscap           True_x000D_Ethernet                       Internet Protocol Version 4 (TCP/IPv4)             ms_tcpip             True_x000D_Ethernet                       Microsoft RDMA - NDK                               ms_rdma_ndk          True_x000D_Ethernet                       Microsoft Network Adapter Multiplexor Protocol     ms_implat            False_x000D_Ethernet                       Link-Layer Topology Discovery Mapper I/O Driver    ms_lltdio            True_x000D_Ethernet                       NDIS Usermode I/O Protocol                         ms_ndisuio           True_x000D_Ethernet                       Point to Point Protocol Over Ethernet              ms_pppoe             True_x000D_Ethernet                       Link-Layer Topology Discovery Responder            ms_rspndr            True_x000D_Ethernet                       Internet Protocol Version 6 (TCP/IPv6)             ms_tcpip6            True_x000D_Ethernet                       Hyper-V Extensible Virtual Switch                  vms_pp               False_x000D_Ethernet                       WFP Native MAC Layer LightWeight Filter            ms_wfplwf_lower      True_x000D_Ethernet                       Client for Microsoft Networks                      ms_msclient          True_x000D_Ethernet                       Npcap Packet Driver (NPCAP)                        INSECURE_NPCAP       True_x000D_Ethernet                       WINS Client(TCP/IP) Protocol                       ms_netbt             True_x000D_Ethernet                       Bridge Driver                                      ms_l2bridge          True_x000D_Ethernet                       WFP 802.3 MAC Layer LightWeight Filter             ms_wfplwf_upper      True_x000D_Ethernet                       QoS Packet Scheduler                               ms_pacer             True_x000D_
Для просмотра активных TCP IP сессий на компьютере используется командлет Get-NetTCPConnection.

PowerShell: задать статический IP адрес в Windows

С помощью PowerShell вы можете задать статический IP адрес для сетевого интерфейса. Чтобы изменить IP адрес, маску подсети и шлюз для сетевого интерфейса, выполните:

Get-NetAdapter -Name Ethernet0| New-NetIPAddress –IPAddress 192.168.1.80 -DefaultGateway 192.168.1.1 -PrefixLength 24

Можно задать IP адрес, представив его в виде массива (более наглядно):

$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.1.22"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParams

Командлет New-NetIPAddress можно использовать для добавления второго IP адреса на сетевой интерфейс .

Если статический IP адрес уже настроен и нужно изменить его, используется командлет Set-NetIPAddress:

Set-NetIPAddress -InterfaceIndex 8 -IPAddress 192.168.1.90

Чтобы отключить получение IP адреса от DHCP для сетевого интерфейса, выполните:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled

Удалить статический IP адрес:

Remove-NetIPAddress -IPAddress "xxx.xxx.xxx.xxx"

Отключить протокол IPv6 для сетевого интерфейса:
Get-NetAdapterBinding -InterfaceAlias Ethernet0 | Set-NetAdapterBinding -Enabled $false -ComponentID ms_tcpip6

Отключить протокол NetBIOS для интерфейса:

Set-NetAdapterBinding -Name Ethernet0 -ComponentID ms_netbios -AllBindings -Enabled $True

Set-DnsClientServerAddress: настроить адреса DNS серверов

Чтобы задать адреса первичного и вторичного DNS серверов в Windows, используется командлет Set-DNSClientServerAddress. Например:

Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.1.11,10.1.1.11

Первый IP адрес адрес выставляется в качестве Preffered DNS, а второй в Alternate DNS.

Можно также задать DNS сервера через массив:

$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParams

После изменения настроек DNS, можно очистить DNS кэш (эквивалент ipconfig /flushdns ):

Clear-DnsClientCache

Вывести содержимое DNS кэша в Windows:
Get-DnsClientCache

Управление таблицей маршрутизации с помощью PowerShell

Для просмотра таблицы маршрутизации используется командлет Get-NetRoute .
Вывести маршрут по умолчанию для физического сетевого интерфейса в Windows:

Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}| Get-netroute| where DestinationPrefix -eq "0.0.0.0/0"

powershell вывести маршрут по умолчанию в Windows

Чтобы добавить новый маршрут, используется New-NetRoute :

New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.0.1" -InterfaceIndex 8

Эта команда добавит постоянный маршрут в таблицу маршрутизации (аналог route -p add). Если вы хотите добавить временный маршрут, добавьте опцию -PolicyStore "ActiveStore" . Такой маршрут будет удален после перезагрузки Windows.

Удалить маршрут из таблицы маршрутизации:

Remove-NetRoute -NextHop 192.168.0.1 -Confirm:$False

PowerShell: получить IP адрес в Windows от DHCP сервера

Чтобы сетевой интерфейс компьютера получал динамический IP адрес от DHCP сервера, выполните команду:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled

Очистите настройки DNS серверов:

Set-DnsClientServerAddress –InterfaceIndex 8 -ResetServerAddresses

И перезапустите интерфейс для получения IP адреса:

Restart-NetAdapter -InterfaceAlias Ethernet0

Если ранее у вас был настроен шлюз, удалите его:

Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false

Если нужно сбросить все настройки IPv4 для сетевых интерфейсов компьютера и переключить их на получение адреса от DHCP, используйте такой скрипт:

$IPType = "IPv4"
$adapter = Get-NetAdapter | ? {$_.Status -eq "up"}
$interface = $adapter | Get-NetIPInterface -AddressFamily $IPType
If ($interface.Dhcp -eq "Disabled") {
If (($interface | Get-NetIPConfiguration).Ipv4DefaultGateway) {
$interface | Remove-NetRoute -Confirm:$false
}
$interface | Set-NetIPInterface -DHCP Enabled
$interface | Set-DnsClientServerAddress -ResetServerAddresses
}

Изменить параметры IP и DNS на удаленном компьютере Windows

Вы можете использовать PowerShell чтобы удаленно изменить настройки IP адреса или DNS серверов на нескольких удаленных компьютерах. Допустим, ваша задача – изменить настройки DNS для всех серверов в указанном Organization Unit (OU) в Active Directory . Для получения списка компьютеров в скрипте ниже примере используется командлет Get-ADComputer , а удаленное подключение к компьютерам выполняется через WinRM (командлет Invoke-Command ):

$Servers = Get-ADComputer -SearchBase ‘OU=Moscow,DC=remontka,DC=loc’ -Filter '(OperatingSystem -like "Windows Server*")' | Sort-Object Name
ForEach ($Server in $Servers) {
Write-Host "Server $($Server.Name)"
Invoke-Command -ComputerName $Server.Name -ScriptBlock {
$NewDnsServerSearchOrder = "192.168.1.11","8.8.4.4"
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "Old DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
$Adapters | ForEach-Object {$_.SetDNSServerSearchOrder($NewDnsServerSearchOrder)} | Out-Null
$Adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DHCPEnabled -ne 'True' -and $_.DNSServerSearchOrder -ne $null}
Write-Host "New DNS settings: "
$Adapters | ForEach-Object {$_.DNSServerSearchOrder}
}
}

EnglishRussianUkrainian