nvspbind.exeを使用しネットワークアダプターの優先順位を設定する
Pocket

Windowsをいじっていると、多くの人が思うCUIで設定できない箇所の多さ。そのうちの一つであるネットワークアダプターの優先順位の設定値について、Microsoftから発表されている「nvspbind.exe」を利用して行う設定方法について記述してみる。

そもそもネットワークアダプターの優先順位って何よ?というと、複数のNICが搭載されているマシンで通信を行うNICの優先順位を設定するもの。

要はネットワークアダプタのバインド順序ね。

この設定を行う場合、通常はコマンドラインから行うことができない。変更を行うためのコマンドも存在しないし、レジストリから設定を行うには変更される箇所が多すぎる(CompRegで見たらレジストリの変更箇所が203箇所もあった)ので、それも現実的ではない。

で何か方法が無いか調べたところ、2010年ごろにMicrosoftが公開したアプリケーション「nvspbind」で設定できるようだという情報を手に入れた。

Sponsored Links

公式ページは以下。

nvspbind – Home

http://archive.msdn.microsoft.com/nvspbind

設定方法に関して記述されていたページは以下。

How to set Network Adapter Priorities from Command Line in Windows 7

http://win7settings.blogspot.jp/2012/04/how-to-set-network-adapter-priorities.html

上記ページを見る限り、これをコマンドから実行することでネットワークアダプターの優先順位を設定することができるようだ。

 

nvspbindのダウンロード

まずは、上記公式ページから「Downloads」タブをクリックしてダウンロードページに移動する。
ダウンロードページに以降すると、対象とする実行ファイルを選択する。
基本的には「Microsoft_Nvspbind_package.EXE」もしくは「32bit_Nvspbind_package.EXE」のどちらかをダウンロードすることになると思う。
ここでは、64bitOSで実行するために「Microsoft_Nvspbind_package.EXE」をダウンロードしてみる。

 

対象ファイルを選択すると、警告文が表示されるので「I Agree」をクリックしてファイルをダウンロードする。

 

で、ダウンロードした実行ファイルをどっかに設置。このファイルを実行して実際に使用する.exeファイル等を希望のフォルダに解凍する。

 

nvspbind.exeの実行

.exeファイルを希望のフォルダに移動したら、実際にコマンドを実行してみよう。
実行前の状態は以下。”ローカル エリア接続”が最も優先順位が低く、”ローカル エリア接続 3″が最も優先されるような状態。

 

これを、”ローカルエリア接続”が最も優先されるようにしてみよう。

まずは、実行できるオプションがどういうものがあるのかを確認してみよう。

  1. /n display NIC information only
  2. /u unbind switch protocol from specified nic(s)
  3. /b bind switch protocol to specified nic(s)
  4. /d disable binding of specified protocol from specified nic(s)
  5. /e enable binding of specified protocol to specified nic(s)
  6. /r repair bindings on specified nic(s)
  7. /o show NIC order for specified protocol
  8. /+ move specified NIC up in binding order for specified protocol
  9. /- move specified NIC down in binding order for specified protocol
  10. /++ move specified NIC up to top of binding order for specified protocol
  11. /– move specified NIC down to bottom of binding order for specified protocol

…英語だね。
簡単に翻訳すると、以下のような意味になる。

  1. /n … NICの情報を表示する
  2. /u … 指定されたNIC(複数可)からのスイッチプロトコルをバインド解除
  3. /b … 指定されたNIC(複数可)に結合するスイッチプロトコル
  4. /d … 指定されたNIC(複数可)に指定されたプロトコルの結合を無効にする
  5. /e … 指定されたNIC(複数可)に指定されたプロトコルの結合を有効にする
  6. /r … 指定されたNIC(複数可)に設定されたバインドを修復する
  7. /o … 指定されたNICに指定されたプロトコルの優先順位を表示する
  8. /+ … 指定されたNICに指定されたプロトコルの優先順位を上げる
  9. /- … 指定されたNICに指定されたプロトコルの優先順位を下げる
  10. /++ … 指定されたNICに指定されたプロトコルの優先順位を一番上に上げる
  11. /– … 指定されたNICに指定されたプロトコルの優先順位を一番下に下げる

というわけで、「/++」のオプションを指定して実行してみる。
アダプタ名だけを指定してもエラーになるので、以下のように指定して実行する。

 nvspbind.exe /++ “ローカル エリア接続” ms_tcpip6
 nvspbind.exe /++ “ローカル エリア接続” ms_tcpip

 

…あれ?
not foundって…無いってことは無いだろ…
詳細設定の状態を確認するが、やはり設定できているようには見えない。

試しに、以下のように全部のネットワークアダプタ名を英語表記にして再度試してみる。

 

 nvspbind.exe /++ “Local Area Connect” ms_tcpip6
 nvspbind.exe /++ “Local Area Connect” ms_tcpip

 

…うまく行ったかな?
詳細設定の状態を確認。

 

うまいこと設定できていることを確認した。
どうやら日本語名のネットワークアダプタには使用できないようだ…

実際に使用する際には、バッチファイルにこのコマンドを実行するように指定して実行前にネットワークアダプタ名を一時修正するようにすればいいかも?

複数台の機器に適用するのであれば、PSexecの/cオプションを指定してローカル側のプログラムを読み込ませるといいかも?

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。