В Windows вы можете управлять настройками сетевых адаптеров не только из графического интерфейса, но из командной строки PowerShell. В этой статье мы рассмотрим основные командлеты, которые позволяют узнать текущий адрес сетевого адаптера, назначить статический IP адрес, DNS сервера, или настроить сетевой интерфейс на получение конфигурации IP от DHCP сервера . Вы можете использовать эти командлеты для настройки сети как в Windows 10/11, так и в Windows Server (или версии Sever Core ), в Hyper-V Server , для изменения настроек IP сетевых адаптеров на удаленных компьютерах, и в PowerShell скриптах.
- Управление сетевыми адаптерами в Windows из PowerShell
- Вывести настройки IP сетевого подключения с PowerShell
- PowerShell: задать статический IP адрес в Windows
- Set-DnsClientServerAddress: настроить адреса DNS серверов
- Управление таблицей маршрутизации с помощью PowerShell
- PowerShell: получить IP адрес в Windows от DHCP сервера
- Изменить параметры IP и DNS на удаленном компьютере Windows
В предыдущих версиях в Windows для управления сетевыми настройками из cmd использовалась из CLI использовалась команда netsh . В PowerShell 3.0 и выше для управления сетевыми настройками Windows можно использовать встроенный PowerShell модуль NetTCPIP .
Чтобы получить список командлетов в этом модуле, выполните:
get-command -module NetTCPIP
Управление сетевыми адаптерами в Windows из PowerShell
Выведите список доступных сетевых интерфейсов в Windows:
Get-NetAdapter
Командлет возвращает имя интерфейса, состояние (Up/Down), MAC адрес, скорость на порту.
В этом примере у меня на компьютере несколько сетевых адаптеров (кроме физического подключения Ethernet и WiFi есть несколько сетевых интерфейсов от Hyper-V и VMWare Player).
Чтобы вывести только активные физические сетевые интерфейсы:
Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}
Можно вывести только определенные параметры сетевых адаптеров, например: имя, скорость, состояние и MAC адрес:
Get-NetAdapter |Select-Object name,LinkSpeed,InterfaceOperationalStatus,MacAddress
Get-NetAdapter –IncludeHidden
Команда вернет в том числе все виртуальные WAN Miniport адаптеры, которые используются для различных типов подключений включая VPN. Перезапуск этих адаптеров часто позволяет решить некоторые ошибки VPN подключений с помощью встроенного клиента Windows. Для управления сетевыми подключениями VPN доступны отдельные команды PowerShell .
Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец ifIndex). В нашем примере, чтобы выбрать физический LAN адаптер Intel 82574L нужно набрать команду:
Get-NetAdapter -Name Ethernet0
или
Get-NetAdapter -InterfaceIndex 8
Можно изменить имя адаптера:
Rename-NetAdapter -Name Ethernet0 -NewName LAN
Чтобы выключить сетевой интерфейс, используйте команды:
Get-NetAdapter -InterfaceIndex 13| Disable-NetAdapter
При включении интерфейса нельзя указать его индекс, т.к. он не присвоен. Включите адаптер по его имени:
Enable-NetAdapter -InterfaceDescription “Hyper-V Virtual Ethernet Adapter"
Если для сетевого адаптера настроен номер VLAN , можно вывести его так:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
Получить информацию об драйвере сетевого адаптера:
Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName
Информация о физических параметров подключения сетевых адаптерах (PCI слот, шина и т.д.).
Get-NetAdapterHardwareInfo
Вывести настройки IP сетевого подключения с PowerShell
Получить текущие настройки сетевого интерфейса (IP адрес, DNS, шлюз):
Get-NetIPConfiguration -InterfaceAlias Ethernet0
Чтобы вывести более подробную информацию о конфигурации сетевого интерфейса, используйте команду:
Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed
В этом случае выводится назначенный профиль сети интерфейса (NetProfile.NetworkCategory), настройки MTU (NetIPv4Interface.NlMTU), включено ли получение адреса от DHCP (NetIPv4Interface.DHCP) и ряд другой полезной информации.
Вывести все 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
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_
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
Get-DnsClientCache
Управление таблицей маршрутизации с помощью PowerShell
Для просмотра таблицы маршрутизации используется командлет Get-NetRoute .
Вывести маршрут по умолчанию для физического сетевого интерфейса в Windows:
Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}| Get-netroute| where DestinationPrefix -eq "0.0.0.0/0"
Чтобы добавить новый маршрут, используется 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}
}
}