web-dev-qa-db-ja.com

PowerShellを介してインターフェイスのMTUを設定する

Windows 7でphysicalインターフェイスのMTUをプログラムで設定しようとしています。

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または私がする必要がある何かがない限り。


ライアンの提案に従って、私はすでにIPv4 MTU(および適切な手段としてIPv6 MTU)を変更していました:

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

再起動後もそうです。

5
MikeyB

申し訳ありませんが、これは実際にはあなたの質問に答えるものではありませんが、とにかくそれなりの情報が含まれていると思いますので、そのままにしておきます。うまくいけば、誰かがより良いものを持っています。

行う:

(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.

だから、あなたが言ったように、それはインターフェースでは機能しますが、ハードウェアNICでは機能しないかもしれません。だから私は本当にあなたの質問に答えていません。

また、Set-NetAdapterAdvancedPropertyもコメントに含めます。ただし、そこにはMTU設定もありません。また、Windows GUIのデバイスプロパティでMTUを設定することもできません。違いはハードウェア固有だと思います。

2
Ryan Ries