Configure o MTU da interface via powershell

5

Estou tentando definir a MTU para uma interface física programaticamente no Windows 7:

PS> (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where { $_.Description -match '^Red Hat.*#2' })

DHCPEnabled      : False
IPAddress        : {10.10.8.3, fe80::447d:38dc:bb39:f311}
DefaultIPGateway : 
DNSDomain        : 
ServiceName      : netkvm
Description      : Red Hat VirtIO Ethernet Adapter #2
Index            : 12

PS> (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where { $_.Description -match '^Red Hat.*#2' }).SetMTU(9000)
Method invocation failed because [System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapterConfiguration] doesn't contain a method named 'SetMTU'.
At line:1 char:113
+ (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Where { $_.Description -match '^Red Hat.*#2' }).SetMTU <<<< (9000)
    + CategoryInfo          : InvalidOperation: (SetMTU:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Mesmo que este método exista , ainda existem erros? Sério?

Por favor ajude.

PS> (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | \
    Where { $_.Description -match '^Red Hat.*#2' }) | Get-Member

retorna, entre outras coisas:

MTU                          Property     System.UInt32 MTU {get;set;}

Mas tentar obter ou definir não faz nada:

(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | \
    Where { $_.Description -match '^Red Hat.*#2' }).MTU

A menos que haja um Invoke-Magic ou algo que eu precise fazer.

De acordo com a sugestão de Ryan, eu já havia mudado o IPv4 MTU (e o IPv6 MTU para uma boa medida):

C:\>netsh interface ipv4 show subinterface "Local Area Connection 2"

   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
  9000                1       3686       6624  Local Area Connection 2

Parece bom e bom, mas isso afeta apenas a , não a interface de hardware:

Isso é mesmo depois de uma reinicialização.

    
por MikeyB 08.12.2014 / 23:20

1 resposta

2

Tudo bem, isso realmente não responde à sua pergunta, mas acho que ela contém algumas informações decentes de qualquer maneira, então vou deixar de lado. Espero que alguém tenha um melhor.

Faça:

(Get-WmiObject -Class Win32_NetworkAdapterConfiguration | 
Where { $_.Description -match '^Red Hat.*#2' }) | 
Get-Member

E observe a saída. Você verá que esta instância na verdade não contém um método chamado SetMTU, apesar do que essa documentação diz. Editar: Na verdade, você pode. Mas minha interface de rede não tem isso. Parece que é específico do hardware.

Então, sei que estou prestes a fazer batota, mas funciona:

PS C:\> $AdapterName = $(Get-NetAdapter | Where { $_.Name -Match 'Ethernet'}).Name
PS C:\> netsh interface ipv4 set subinterface "$AdapterName" mtu=1500 store=persistent
Ok.

Então, como você disse, isso funciona para a interface, mas talvez não para o NIC de hardware. Então, eu realmente não respondi a sua pergunta.

Você também mencionou Set-NetAdapterAdvancedProperty em seus comentários também. No entanto, também não tenho uma configuração de MTU. Nem posso definir o MTU nas propriedades do dispositivo na GUI do Windows. Eu acho que as diferenças são específicas do hardware.

    
por 09.12.2014 / 00:03

Tags