Установить 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
Хорошо выглядит, но это влияет только на подинтерфейс, а не на аппаратный интерфейс:
Это даже после перезагрузки.
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