Настраиваем сетевые параметры 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
Управление сетевыми адаптерами в 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
Вы можете обращаться к сетевым интерфейсам по их именам или индексам (столбец 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 ---- ----------- ----------- ------- 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"
Чтобы добавить новый маршрут, используется 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 адрес, шлюз