Налаштування мережі за допомогою PowerShell (IP адреса, DNS, шлюз, маршрути)

У цій статті ми розглянемо особливості налаштування параметрів мережевих адаптерів в Windows з PowerShell. Подивимося, як дізнатися і призначити статичний IP адреса, DNS сервера, або налаштувати мережевий інтерфейс на отримання конфігурації IP від ​​DHCP сервера. Ви можете використовувати ці командлети для настройки мережі в Сore / Nano версіях Windows Server, в Hyper-V Server, зміни налаштувань IP на віддалених комп'ютерах або по мережі серверах або в PS скриптах.

Раніше для налаштування параметрів мережі в Windows з CLI використовувалася команда netsh interface ipv4. У PowerShell 3.0 і вище для управління мережевими настройками Windows можна використовувати вбудований PowerShell модуль NetTCPIP.

Щоб отримати список командлетів в цьому модулі, виконайте:

get-command -module NetTCPIP

У цей модуль також входить командлет Test-NetConnection, який можна використовувати для перевірки доступності TCP портів на віддалених комп'ютерах.

зміст:

  • Управління мережевими адаптерами з PowerShell
  • Перегляд налаштувань TCP / IP мережного інтерфейсу з PowerShell
  • Налаштувати статичний IP адреса з PowerShell
  • Set-DnsClientServerAddress: налаштувати адреси DNS серверів
  • PowerShell: Налаштування отримання IP адреси від DHCP сервера
  • Віддалене зміна IP / DNS налаштувань в Windows

Управління мережевими адаптерами з PowerShell

Виведемо список доступних мережевих інтерфейсів комп'ютера:

Get-NetAdapter

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

У цьому прикладі у мене на комп'ютері кілька мережевих адаптерів (крім фізичного підключення Ethernet0 є кілька мережевих інтерфейсів від Hyper-V і VMWare Player).

Ви можете звертатися до мережевих інтерфейсів за їхніми іменами або індексами (стовпець 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

Перегляд налаштувань TCP / IP мережного інтерфейсу з PowerShell

Отримати поточні настройки мережевого інтерфейсу (IP адреса, DNS, шлюз):

Get-NetIPConfiguration -InterfaceAlias ​​Ethernet0

Щоб вивести більш детальну інформацію про конфігурацію мережевого інтерфейсу, використовуйте команду:

Get-NetIPConfiguration -InterfaceAlias ​​Ethernet0 -Detailed

У цьому випадку виводиться призначений профіль мережі інтерфейсу (NetProfile.NetworkCategory), настройки MTU (NetIPv4Interface.NlMTU), включено чи отримання адреси від DHCP (NetIPv4Interface.DHCP) і ряд іншої корисної інформації.

Отримати значення тільки IP адреса інтерфейсу:

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

Налаштувати статичний IP адреса з PowerShell

Спробуємо поставити статичний IP адреса для мережевого інтерфейсу. Щоб змінити IP адресу, маску підмережі та шлюз для мережевого інтерфейсу:

New-NetIPAddress -IPAddress 192.168.1.80 -DefaultGateway 192.168.1.1 -PrefixLength 24 -InterfaceIndex 8

Можна задати 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

Для перегляду таблиці маршрутизації використовується командлет Get-NetRoute. Щоб додати новий маршрут, використовується New-NetRoute:

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

Відключимо IPv6 протокол для мережевого інтерфейсу:

Get-NetAdapterBinding -InterfaceAlias ​​Ethernet0 | Set-NetAdapterBinding -Enabled: $ false -ComponentID ms_tcpip6

Set-DnsClientServerAddress: налаштувати адреси DNS серверів

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

Set-DNSClientServerAddress -InterfaceIndex 8 -ServerAddresses 192.168.1.11,10.1.1.11

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

$ DnsParams = @
InterfaceIndex = 8
ServerAddresses = ( "8.8.8.8", "8.8.4.4")

Set-DnsClientServerAddress @dnsParams

Після зміни налаштувань DNS, можна очистити DNS кеш:

Clear-DnsClientCache

PowerShell: Налаштування отримання IP адреси від 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

Віддалене зміна IP / DNS налаштувань в Windows

Ви можете використовувати PowerShell щоб віддалено змінити налаштування IP адрес або DNS серверів на декількох віддалених комп'ютерах. Припустимо, ваша задача - змінити налаштування DNS для всіх серверів в зазначеному контейнері AD. Для отримання списку комп'ютерів в скрипті нижче прикладі використовується командлет 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