Назад | Перейти на главную страницу

Установите MTU интерфейса через powershell

Я пытаюсь установить MTU для физический программный интерфейс в 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

Даже если этот метод существует это еще ошибки? Шутки в сторону?

Пожалуйста помоги.


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

возвращает, среди прочего:

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

Но попытка получить или установить ничего не дает:

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

Если нет Invoke-Magic или что-то мне нужно сделать.


В соответствии с предложением Райана я уже изменил MTU IPv4 (и MTU IPv6 для хорошей меры):

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

Вроде бы хорошо, но это влияет только на субинтерфейс, а не аппаратный интерфейс:

Это даже после перезагрузки.

Хорошо, это не совсем ответ на ваш вопрос, но я думаю, что он все равно содержит неплохую информацию, поэтому я оставлю это. Надеюсь, у кого-то есть лучший.

Делать:

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

И наблюдайте за выходом. Вы увидите, что этот экземпляр фактически не содержит метода с именем SetMTU, несмотря на то, что говорится в этой документации. Редактировать: На самом деле может твое. Но мой сетевой интерфейс не есть это. Похоже, это зависит от оборудования.

Я знаю, что собираюсь обмануть, но это работает:

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

Итак, как вы сказали, это работает для интерфейса, но, возможно, не для аппаратной сетевой карты. Так что я не ответил на ваш вопрос.

Вы также упомянули Set-NetAdapterAdvancedProperty в ваших комментариях. Однако у меня там нет настройки MTU. Я также не могу установить MTU в свойствах устройства в графическом интерфейсе Windows. Я думаю, что различия зависят от оборудования.