Установить 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

Хорошо выглядит, но это влияет только на подинтерфейс, а не на аппаратный интерфейс:

hw interface mtu = 1500

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

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. Я думаю, что различия зависят от оборудования.

$interface = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Где { $.DefaultIPGateway -ne $null - и $.IPAddress -ne $null }) | выберите Описание

$IFdesc = $interface.Description$AdapterName = $(Get-NetAdapter | Где { $_.InterfaceDescription -eq $IFdesc }).Name

netsh интерфейс ipv4 устанавливает подинтерфейс «$AdapterName» mtu=1360 store=persistent

Другие вопросы по тегам