Configura le impostazioni di rete su Windows con PowerShell: indirizzo IP, DNS, gateway predefinito, percorsi statici

In Windows, puoi gestire le impostazioni per le tue schede di rete non solo dalla GUI ma anche dal prompt dei comandi di PowerShell. In questo articolo esamineremo i cmdlet più importanti che puoi utilizzare per scoprire l'indirizzo IP corrente di una scheda di rete, assegnare un indirizzo IP statico, assegnare un IP del server DNS o configurare un'interfaccia di rete per ricevere una configurazione IP da un server DHCP. Puoi utilizzare questi cmdlet per configurare la rete sia su Windows 10/11 che su Windows Server (o edizioni Server Core), Hyper-V Server, per modificare le impostazioni IP delle schede di rete sui computer remoti e negli script di automazione di PowerShell.

Contenuto:

In precedenza, ilnetsh interface ipv4 Il comando è stato utilizzato per gestire le impostazioni di rete dalla CLI. In PowerShell 3.0 e versioni successive è possibile utilizzare il file built-inNetTCPIPModulo PowerShell per gestire le impostazioni di rete su Windows.

Per ottenere l'elenco dei cmdlet in questo modulo, eseguire il comando seguente:

get-command -module NetTCPIP

Questo modulo include anche il cmdlet Test-NetConnection che può essere utilizzato per trovare porte TCP aperte su computer remoti.

Gestione delle impostazioni della scheda di rete tramite PowerShell

Elenca le interfacce di rete disponibili su un computer Windows:

Get-NetAdapter

Il cmdlet restituisce il nome dell'interfaccia, il suo stato (Su/Giù), l'indirizzo MAC e la velocità della porta.

In questo esempio, ho diversi adattatori di rete sul mio computer (oltre alla connessione fisica, Ethernet0, ho le interfacce di rete Hyper-V e VMWare Player).

Per visualizzare solo le interfacce di rete fisica abilitate:

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

Puoi visualizzare solo alcuni parametri della scheda di rete, come nome, velocità, stato o indirizzo MAC:

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

Windows potrebbe avere alcuni adattatori di rete nascosti. Per mostrarli tutti, aggiungi ilIncludiNascostoparametro:

Get-NetAdapter –IncludeHidden

Il risultato sarà un elenco di tutti gli adattatori Miniport WAN virtuali utilizzati per diversi tipi di connessioni, inclusa VPN. Un riavvio di questi adattatori spesso risolve alcuni errori di connessione VPN con il client Windows integrato. Sono disponibili cmdlet PowerShell separati per la gestione delle connessioni VPN.

È possibile fare riferimento alle interfacce di rete tramite i relativi nomi o indici (la colonna Indice). Nel nostro esempio, per selezionare l'adattatore LAN fisico Intel 82574L Gigabit Network Connection, utilizzare il comando:

Get-NetAdapter -Name Ethernet0

O:

Get-NetAdapter -InterfaceIndex 8

È possibile modificare il nome dell'adattatore:

Rename-NetAdapter -Name Ethernet0 -NewName LAN

Per disabilitare un'interfaccia di rete, utilizzare questo comando:

Get-NetAdapter -Name Ethernet0| Disable-NetAdapter

Abilita la NIC con il suo nome:

Enable-NetAdapter -Name Ethernet0

Se l'adattatore di rete ha un numero VLAN configurato, puoi visualizzarlo:

Get-NetAdapter | ft Name, Status, Linkspeed, VlanID

Ecco come puoi trovare le informazioni sul driver della scheda di rete che stai utilizzando:

Get-NetAdapter | ft Name, DriverName, DriverVersion, DriverInformation, DriverFileName

Elenca le informazioni sugli adattatori di rete fisici (slot PCI, bus, ecc.):

Get-NetAdapterHardwareInfo

Disabilitare il protocollo IPv6 per l'interfaccia di rete:

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

Disabilitare il protocollo NetBIOS per un'interfaccia di rete:

Set-NetAdapterBinding -Name Ethernet0 -ComponentID ms_netbios -AllBindings -Enabled $True

Come ottenere le impostazioni di un indirizzo IP con PowerShell

Per ottenere le impostazioni attuali della scheda di rete in Windows (indirizzo IP, DNS, gateway predefinito):

Get-NetIPConfiguration -InterfaceAlias Ethernet0

IMPARENTATO:Configura lo scavenging DNS per ripulire i record DNS obsoleti in AD

Per visualizzare informazioni più dettagliate sulla configurazione TCP/IP dell'interfaccia di rete, utilizzare il comando

Get-NetIPConfiguration -InterfaceAlias Ethernet0 -Detailed

In questo caso, vengono visualizzate la posizione di rete assegnata (profilo) (NetProfile.NetworkCategory) dell'interfaccia, le impostazioni MTU (NetIPv4Interface.NlMTU), se è abilitato l'ottenimento di un indirizzo IP da DHCP (NetIPv4Interface.DHCP) e altre informazioni utili.

Per ottenere solo l'indirizzo dell'interfaccia IPv4:

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

Restituisce solo il valore dell'indirizzo IP dell'interfaccia:

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

Durante la copia di file sulle macchine virtuali, molti amministratori hanno notato scarse prestazioni di rete su Windows Server 2019 con i ruoli Hyper-V abilitati. In questo caso, ripristinare le impostazioni dello stack TCP sulle impostazioni utilizzate in Windows Server 2016 aiuterà a risolvere i problemi:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled

Visualizza un elenco dei protocolli di rete che possono essere abilitati o disabilitati per un adattatore di rete:

Get-NetAdapterBinding -Name ethernet0 -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

Per visualizzare le sessioni TCP/IP attive su un computer, utilizzare il cmdlet Get-NetTCPConnection.

Imposta l'indirizzo IP statico su Windows utilizzando PowerShell

Proviamo a impostare un indirizzo IP statico per la scheda NIC. Per modificare un indirizzo IP, una maschera di rete e un gateway predefinito per un'interfaccia di rete Ethernet0, utilizzare il comando:

Get-NetAdapter -Name Ethernet0| New-NetIPAddress –IPAddress 192.168.2.50 -DefaultGateway 192.168.2.1 -PrefixLength 24

È possibile impostare un indirizzo IP utilizzando una struttura ad array (più visivamente):

$ipParams = @{
InterfaceIndex = 8
IPAddress = "192.168.2.50"
PrefixLength = 24
AddressFamily = "IPv4"
}
New-NetIPAddress @ipParams

È possibile utilizzare New-NetIPAddress per aggiungere un secondo indirizzo IP (alias) a un adattatore di rete.

Se un indirizzo IP statico è già configurato e deve essere modificato, utilizzare il fileImposta-IndirizzoIPNetcmdlet:

Set-NetIPAddress -InterfaceAlias Ethernet0 -IPAddress 192.168.2.90

Per disabilitare l'ottenimento di un indirizzo IP da DHCP per il tuo adattatore, esegui il comando:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Disabled

Rimuovi l'indirizzo IP statico:

Remove-NetIPAddress -IPAddress "xxx.xxx.xxx.xxx"

Imposta gli indirizzi IP del server DNS in Windows con PowerShell

Per impostare gli indirizzi IP del server DNS preferito e alternativo in Windows, utilizzare il fileSet-DNSClientServerAddresscmdlet. Per esempio:

Set-DNSClientServerAddress –InterfaceIndex 8 –ServerAddresses 192.168.2.11,10.1.2.11

Puoi anche specificare gli IP dei server dei nomi DNS utilizzando un array:

$dnsParams = @{
InterfaceIndex = 8
ServerAddresses = ("8.8.8.8","8.8.4.4")
}
Set-DnsClientServerAddress @dnsParams

Dopo aver modificato le impostazioni DNS, puoi svuotare la cache del risolutore DNS (equivalente aipconfig /flushdns):

Clear-DnsClientCache

Visualizza il contenuto della cache DNS in Windows::
Get-DnsClientCache

Gestione delle tabelle di routing con PowerShell

ILGet-NetRoutecmdlet viene utilizzato per visualizzare la tabella di routing.

Ottieni il percorso gateway predefinito per un'interfaccia di rete fisica in Windows:

Get-NetAdapter -Physical | ? {$_.Status -eq "Up"}| Get-netroute| where DestinationPrefix -eq "0.0.0.0/0"

Per aggiungere un nuovo percorso, utilizzare ilNuovo-NetRoutecmdlet:

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

Questo comando aggiunge un percorso permanente alla tabella di routing (simile aroute -p add). Se desideri aggiungere un percorso temporaneo, aggiungi il file-PolicyStore "ActiveStore"opzione. Questo percorso verrà eliminato dopo il riavvio di Windows.

Rimuovere una rotta dalla tabella di routing:

Remove-NetRoute -NextHop 192.168.0.1 -Confirm:$False

PowerShell: modifica l'adattatore dall'indirizzo IP statico a DHCP

Per configurare il computer per ottenere un indirizzo IP dinamico per l'adattatore di rete dal server DHCP, esegui questo comando:

Set-NetIPInterface -InterfaceAlias Ethernet0 -Dhcp Enabled

Cancella le impostazioni del server DNS:

Set-DnsClientServerAddress –InterfaceAlias Ethernet0 -ResetServerAddresses

E riavvia l'adattatore di rete per ottenere automaticamente un indirizzo IP dal server DHCP:

Restart-NetAdapter -InterfaceAlias Ethernet0

Se in precedenza avevi configurato un gateway predefinito, rimuovilo:

Set-NetIPInterface -InterfaceAlias Ethernet0| Remove-NetRoute -Confirm:$false

Se è necessario reimpostare tutte le impostazioni IPv4 per le interfacce di rete del computer e cambiarle per ottenere un indirizzo IP dinamico da DHCP, utilizzare il seguente script:

$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
}

Modifica DNS e indirizzi IP in remoto su più computer con PowerShell

È possibile utilizzare PowerShell per modificare in remoto l'indirizzo IP o le impostazioni del server DNS su più computer remoti.

Supponiamo che il tuo compito sia modificare le impostazioni DNS su tutti gli host Windows Server nell'unità organizzativa (UO) AD specifica. Lo script seguente utilizza il cmdlet Get-ADComputer per ottenere l'elenco dei computer da Active Directory e quindi si connette ai computer remoti tramite WinRM (viene utilizzato il cmdlet Invoke-Command):

$Servers = Get-ADComputer -SearchBase ‘OU=Servers,OU=Berlin,OU=DE,DC=woshub,DC=cpm’ -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.2.11","8.8.8.8"
$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}
}
}

Related Posts