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

Настраиваем сетевые параметры 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 адрес сетевых адаптеров и скорость подключения

Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец 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
----                           -----------                                        -----------          -------
Ethernet                       File and Printer Sharing for Microsoft Networks    ms_server            True
Ethernet                       NetBIOS Interface                                  ms_netbios           True
Ethernet                       Microsoft LLDP Protocol Driver                     ms_lldp              True
Ethernet                       Microsoft NDIS Capture                             ms_ndiscap           True
Ethernet                       Internet Protocol Version 4 (TCP/IPv4)             ms_tcpip             True
Ethernet                       Microsoft RDMA - NDK                               ms_rdma_ndk          True
Ethernet                       Microsoft Network Adapter Multiplexor Protocol     ms_implat            False
Ethernet                       Link-Layer Topology Discovery Mapper I/O Driver    ms_lltdio            True
Ethernet                       NDIS Usermode I/O Protocol                         ms_ndisuio           True
Ethernet                       Point to Point Protocol Over Ethernet              ms_pppoe             True
Ethernet                       Link-Layer Topology Discovery Responder            ms_rspndr            True
Ethernet                       Internet Protocol Version 6 (TCP/IPv6)             ms_tcpip6            True
Ethernet                       Hyper-V Extensible Virtual Switch                  vms_pp               False
Ethernet                       WFP Native MAC Layer LightWeight Filter            ms_wfplwf_lower      True
Ethernet                       Client for Microsoft Networks                      ms_msclient          True
Ethernet                       Npcap Packet Driver (NPCAP)                        INSECURE_NPCAP       True
Ethernet                       WINS Client(TCP/IP) Protocol                       ms_netbt             True
Ethernet                       Bridge Driver                                      ms_l2bridge          True
Ethernet                       WFP 802.3 MAC Layer LightWeight Filter             ms_wfplwf_upper      True
Ethernet                       QoS Packet Scheduler                               ms_pacer             True

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

Если статический 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=winitpro,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}
}
}

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