Главная

Tuesday, 24 September 2024

Управление настройками сети с PowerShell, часть 2.


Всем привет.

Продолжим дергать сетевые настройки с помощью 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

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


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

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

Get-NetAdapter

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


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

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

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

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


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

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


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

Get-NetAdapterBinding -Name ethernet -IncludeHidden -AllBindings


Для просмотра активных 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.25"

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","4.4.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=Dubai,DC=forza,DC=com’ -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","4.4.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}

}

}

Удачи.

No comments:

Post a Comment

А что вы думаете по этому поводу?