ネットワークコマンドで管理が変わる!

第5回 netshコマンドの概要


今月のコマンド

netsh (dump)

netsh (exec)

netsh (set address)

netsh (set dns)

netsh (ser wins)

netsh (pushd)

netsh (popd)

---------------------------------------------------------------------------

netshコマンドはネットワークシェル

netshコマンドの概要

---------------------------------------------------------------------------

netshとは

netshは、実行中のコンピュータのネットワーク構成を表示および変更するコマンドだ。ローカルでもリモートでも使用でき、指定したコンピュータに対して複数のコマンドをバッチモードで連続実行できるスクリプト機能もある。さらにnetshを使ってテキストファイルに構成スクリプトを保存することができ、保存したスクリプトは他のコンピュータを構成する際に実行スクリプトとして利用できる。

netshコマンドは、Windows 2000Professional/ServerWindows XP/WindowsServer 2003とで機能にかなりの違いがあり、その上SPによっても違いがあるので、注意していただきたい。なお、Windows 2000についてはSP4で検証しているが、SP3以前については検証していないので、SP3以前の場合は一部のコマンド/オプションが使えない場合があるかもしれない。また、この記事が掲載される頃には、Windows Server 2003 R2が正式リリースされていると思うが、ざっと見た限りでは、SP1と大きな違いはないようだ。今後コマンドの解説の中でR2で違いがある場合は、その都度注釈することにする。

また、このコマンドは非常に複雑な体系になっている上に、HELPも分かりにくく、HELPで表示されるコマンドが使えなかったり、逆にHELPに表示されないコマンドが利用できる場合もあるなど、HELPの間違いも目につく。


netshを実行する2つのモード

netshコマンドは、cmd.execommand.comと同じシェルコマンドでもある。cmd.execommand.comと違うのは、ネットワーク機能に限定されたネットワーク用のシェルコマンドだという点だ。

 netshコマンドの実行には、ダイレクトコマンドモードとシェルモードの2つの方法がある (このモードの呼び名については、MSでも特に名前を付けていないようなので筆者が勝手に付けたものだ)。ダイレクトコマンドモードというのは、「cmd.exe /c <コマンド>」あるいは「command.com /c <コマンド>」と同様に、最初にすべてのコマンドとパラメータを指定して、実行後に自動的に終了するモードだ。シェルモードというのは、「cmd.exe」あるいは「command.com」を実行した場合と同様に、実行後に専用のコマンドプロンプトが開き、そのコマンドプロンプトでサブコマンド (netshコマンド) を実行するモードだ。専用のコマンドプロンプトは、閉じるためのコマンドを入力しない限り閉じることはないので、いくらでもサブコマンドを連続して実行できる。


netshのダイレクトコマンドモード

netshのダイレクトコマンドモードの書式は次のとおり。

netsh [-a AliasFile] [[-c ]Context] [-r RemoteMachine
[-u [DomainName\]UserName [-p {Password | *}]]]
{NetshCommand | -f ScriptFile}


 詳細はコマンドレファレンスに譲るが、基本は「netsh c Context NetshCommand」の形になる。

-cオプションにはnetshコマンドを実行するコンテキストを指定する (コンテキストについてはこの後で説明する)。このパラメータを省略した場合は、ルートのコンテキストが指定されたとみなされる。

 「NetshCommand」にはnetsh上で実行できるサブコマンド (netshコマンド) をパラメータを含めて指定する。

-rオプションは、リモートコンピュータでnetshコマンドを実行するときに指定する。また-uオプションと-pオプションは、別のアカウントの権限を使ってnetshコマンドを実行する際に使用する (-uオプションと-pオプションはWindows Server 2003でのみ有効)。ただし、リモートでの実行は色々制約もある。

-aオプションと-fオプションは似ているが若干の違いがある。共に複数のnetshコマンドを記述したスクリプトを実行するが、-fオプションは実行後にcmd.exeのコマンドプロンプトに戻るのに対し、-aオプションでは実行後にcmd.exeのコマンドプロンプトに戻らず、netshコマンドプロンプトに移行する。また、-fオプションはnetshコマンドの代わりに指定するのに対し、-aオプションではnetshコマンドと両方を指定することができる。


netshのシェルモード

netshコマンドを、「NetshCommand」または-fオプションを省略した形、つまり次の書式で実行した場合は、netshのシェルモードに移行する。

netsh [-a AliasFile] [-c Context]
[-r RemoteMachine [-u [DomainName\]UserName
[-p {Password | *}]]]


 この時、コマンドプロンプトが “netsh>“ に変わる。-rオプションでリモートコンピュータに接続した場合は、コマンドプロンプトが “[コンピュータ名] netsh>“ になる。-cオプションを指定した場合は、そのコンテキストに移動し、コマンドプロンプトが “netsh コンテキスト名> (Windows XP/Server 2003の場合)、”コンテキスト名> (Windows 2000の場合) となる。サブコンテキストまで同時に指定する場合は、”interface ip” のように “ “ でコンテキストパスを囲む。

シェルモードでは、netshが提供するnetshコマンドを実行することができる。cmd.exeのコマンドプロンプトに戻るには「bye」または「exit」または「quit」と入力すればよい。


画面1● Windows XPのnetshコマンドプロンプト


画面2● Windows 2000のnetshコマンドプロンプト


---------------------------------------------------------------------------

ディレクトリ構造に似たコンテキストの階層構造

netshのコンテキストツリー

---------------------------------------------------------------------------

netshのコンテキスト

 netshのコンテキストは、ネットワーク構成をグループ化したもので、”interface” コンテキスト、”routing” コンテキスト、”ras” コンテキストなどがある。また、コンテキストの中には、さらにサブコンテキストがあるものもある。この辺はディレクトリ構造に似ている。netshの全コンテキストおよびサブコンテキストをツリー状に表示すると次のようになる。

rootinterfaceip

             ipv6――――――――――――┬6to4

              (XP SP1以降/Server 2003) isatap (XP SP1以降/Server 2003

             portproxy (XP SP1以降/Server 2003)

    routing―┬ip―――――--―┬autodhcp

                             dnsproxy

                             igmp

                             nat

                             ospf

                             relay

                             rip

                             routerdiscovery

             ipx――――-―┬rip

                 (2000/XP )  sap

                             netbios

    ras―――┬ip

              ipx

              appletalk

              aaaa

              netbeui (2000)

              diagnostics (Server 2003)

    ipsec――――――┬dynamic

      (Server 2003 ) static

    dhcp――――――――――――┬scope

    (2000 Server/Server 2003) └mscope
    wins (2000 Server/Server 2003)

    aaaa (2000 Server/Server 2003)

    bridge (XP/Server 2003)

    diag (XP/Server 2003)

    firewall (XP SP2/Server 2003 SP1以降)

    winsock (XP SP2/Server 2003 SP1以降)

    rpc (Server 2003)


interface
コンテキスト

TCP/IPプロトコル (アドレス、デフォルトゲートウェイ、DNSサーバー、およびWINSサーバー) を構成し、構成内容と統計情報を表示する。

routingコンテキスト

ルーティングサーバーを構成し、管理する。

rasコンテキスト

リモートアクセスサーバーを構成し、管理する。

ipsecコンテキスト (Windowx Server 2003のみ)

IPSecの静的または動的モードの設定、規則、パラメータを構成および表示する。

dhcpコンテキスト (Windowx 2000 Server/Server 2003のみ)

DHCPサーバーを構成し、管理する。

winsコンテキスト (Windowx 2000 Server/Server 2003のみ)

WINSサーバーを構成し、管理する。

aaaaコンテキスト (Windowx 2000 Server/Server 2003のみ)

 インターネット認証サービス (IAS) およびルーティングとリモートアクセスサービスで使用するAAAA (認証 : Authentication、承認 : Authorization、アカウンティング : Accounting、監査 : Auditing) データベースの構成を表示し、設定する。

bridgeコンテキスト (Windowx XP/Server 2003のみ)

レイヤ3互換モード、アダプタ情報を表示・構成し、ネットワークブリッジを管理する。

diagコンテキスト (Windowx XP/Server 2003のみ)

OSおよびネットワークサービスパラメータの管理とトラブルシューティングを行う。

firewallコンテキスト (Windowx XP SP2/Server 2003 SP1以降のみ)

ファイアーウォールを構成し、管理する。

winsockコンテキスト (Windowx XP SP2/Server 2003 SP1以降のみ)

Winsockアプリケーション用ネットワークソケットを構成し、管理する。

rpcコンテキスト (Windowx XServer 2003のみ)

サブネットとインターフェイスの特定の設定またはすべての設定を変更、リセット、表示する。


>コンテキスト間の移動

シェルモードで、あるコンテキストから別のコンテキスト/サブコンテキストに移動するには、netshコマンドプロンプトでコンテキスト名を入力する。例えば “interface” コンテキストに移動するには「interface」と入力すればよい。コマンドプロンプトが “interface> (Windows 2000の場合)、”netsh interface> (Windows XP/Server 2003の場合) と変わることで、現在のコンテキストが分かる。

なお、コンテキスト名は他のコンテキストと区別できる範囲で短く省略して入力できる。例えば「interface」は「inter」とか「in」と省略できる。逆に、”ip” コンテキストのように複数存在する場合は、親コンテキストを含めて、例えば「interface ip」と入力すればよい。ただし例えば、現在 “interface” コンテキストにいる場合のように、直下のサブコンテキストに移動する場合は「ip」と入力するだけでサブコンテキストに移動できる。現在のコンテキストから親コンテキストに戻るには「..」または「.」と入力すればよい。


>コンテキストにより使用できるコマンドが異なる

コンテキストにより使用できるコマンドが異なる。そのコンテキストで使用できるコマンドを知りたい場合は、各コンテキストのコマンドプロンプトで「?」あるいは「/?」あるいは「help」と入力する。サブコンテキストのコマンドを知りたい場合は、サブコンテキスト名に半角スペースを空けて「?」または「/?」または「help」を入力する。例えば “netsh ras” コンテキスト上で “ip” サブコンテキストのコマンド一覧を表示するには、「ip ?」または「ip /?」または「ip help」と入力する。

 現在のコンテキストから、コンテキストを変更しないままサブコンテキストのコマンドを実行するには、サブコンテキスト名に半角スペースを空けてコマンドを入力する。例えば、”netsh interface” コンテキスト にいるときに、”ip” サブコンテキストのdumpコマンドを実行するには「ip dump」と入力する。

 コマンドの場合も、コンテキストと同様に、他のコマンドと区別できる限りにおいて短縮して入力することができる。


---------------------------------------------------------------------------

複数のネットワーク設定を簡単に切り替える

netsh (dump/exec)

---------------------------------------------------------------------------

IP設定を簡単に保存して切り替える

 同じノートPCを会社と家庭とで使っているような場合、会社と家庭とではネットワークの設定が違っていることはよくある。GUI画面でその都度設定を変更するのは面倒だが、netshコマンドを使うと、スクリプトファイルから簡単に設定を変更することができる。スクリプトファイルは自分で作ることもできるが、やはりnetshコマンドを使うと簡単に作成できる。

 なお、Windows XPでは、TCP/IPのプロパティから「代替の構成」タブを使うと、普段はDHCPIPアドレスを構成しているコンピュータを、DHCPサーバーのない環境では固定IPアドレスで構成できる機能がある。会社でDHCPを使い、家庭では固定IPアドレスにするといった場合は、この機能を使った方がよいだろう。しかし、「代替の構成」機能のないWindows 2000の場合や、Windows XPでも複数の固定IPアドレスを切り替えたい場合などはnetshコマンドによるスクリプトファイルが便利だ。具体的な方法は次のとおり。

 まず現在のネットワーク設定をスクリプトファイルに保存する。例えば、スクリプトファイルをc:\に “network1” というファイル名 (拡張子は付けない) で作成するなら、コマンドプロンプトで「netsh -c interface ip dump > c:\network1

と入力する。

 次に、別のネットワーク環境の設定を行った後で、「netsh c interface ip dump > c:\network2」と入力する。さらに別のネットワーク環境を保存したい場合は同様に、スクリプトファイル名を変えてコマンドを実行する。なお、この場合は、”-c” と “ “ を省略して「netsh interface ip dump > c:\network1」のように入力しても同じ結果が得られる。

 スクリプトファイルができたところで、そのスクリプト環境に変更する場合は、コマンドプロンプトで「netsh exec <スクリプトファイル名>」あるいは「netsh -f <スクリプトファイル名>」と入力する。例えば、network1の環境にしたいなら、「netsh exec c:\network1」、または「netsh f c:\network1」と入力し、network2の環境にしたいのであれば、「netsh exec c:\network2」あるいは「netsh -f c:\network2」と入力する。

 dumpコマンドで作成されるスクリプトファイルはテキストファイルなので、テキストエディタで編集することができる。画面3にdumpコマンドで作成されたスクリプトの例を示す。


画面3● dumpコマンドで作成されたスクリプトの例


 スクリプトファイルは1行に1つのnetshコマンドを並べたもので、行頭に “#” のある行はコメント行だ。画面3のスクリプトファイルには、pushdコマンド、set addressコマンド、set dnsコマンド、set winsコマンド、popdコマンドが記述されている。これらのコマンドについてはコマンドレファレンスを参照していただきたい。

 dumpコマンドでのスクリプトファイルの作成は一度行えば、よいが、execコマンドあるいは “-f” オプションによる設定は毎回行うことになるので、これをバッチファイルに記述しておけばさらに簡単になる。


 今月のコマンドリファレンス

netsh

実行中のコンピュータのネットワーク構成を表示、変更、保存する。ローカルでもリモートでも使用でき、指定したコンピュータに対して複数のコマンドをバッチモードで連続実行できるスクリプト機能もある。

[構文1] ダイレクトコマンドモード

netsh [-a AliasFile] [[-c ]Context] [-r RemoteMachine [-u [DomainName\]UserName
[-p {Password | *}]]] {NetshCommand | -f ScriptFile}

[構文2] シェルモード

netsh [-a AliasFile] [-c Context] [-r RemoteMachine [-u [DomainName\]UserName
[-p {Password | *}]]]

[パラメータ]

-a AliasFile

複数のnetshコマンドを記述したエイリアスファイルを指定する。記述した順番にnetshコマンドが実行され、実行後にnetshコマンドプロンプトに移行する。

[-c ]Context

指定したnetshコンテキストに移行する。ダイレクトコマンドモードでは “-c” を省略できる。シェルモードでサブコンテキストまで移行する場合は、コンテキストパスを “ “ で囲む。

-r RemoteMachine

リモートコンピュータを構成する場合に、RemoteMachineには構成するリモートコンピュータを、WINSに格納されているコンピュータ名、UNC名、DNSサーバーによって解決されるインターネット名、またはIPアドレスで指定する。処理の内容は、Netshコマンドプロンプトで「set machine」を使用したときと同様。このオプションの使用時には、現在のnetshのインスタンスに対してのみ対象コンピュータを設定する。終了後に再度「netsh」と入力すると、対象コンピュータがローカルコンピュータとしてリセットされる。

-u [DomainName\]UserName

リモートコンピュータの管理者を指定する。Windows Server 2003でのみ有効。

-p {Password | *}

リモートコンピュータの管理者のパスワードを指定する。パスワードの代わりに “*” を指定すると、パスワードを尋ねてくるのでキーボードから入力する。その際入力したパスワードは画面に表示されない。Windows Server 2003でのみ有効。

NetshCommand

実行するnetshコマンドを必要なパラメータを含めて指定する。netshコマンドの実行後にnetsh.exeを終了する。NetshCommandについては下記のnetsh Commandリファレンスを参照。

-f ScriptFile

複数のnetshコマンドを記述したスクリプトファイルを指定する。記述した順番にnetshコマンドが実行され、実行後にnetsh.exeを終了する。

<パラメータなし>

パラメータを指定せずにnetshを使うと、シェルモードのnetshコマンドプロンプトが表示される。

-----------------------------------------------------------------------------------------------------------------------------------------

Netsh Commandリファレンス

これらのnetshコマンドは、ダイレクトコマンドモードで実行することも、シェルモードで実行することもできる。ただし、それぞれのコマンドが実行できるコンテキストは異なるので、ダイレクトコマンドモードの場合は-cオプションで実行可能なコンテキストを指定する。またシェルモードの場合は、実行できるコンテキストに移動してからコマンドを実行するか、コンテキスト名をコマンドと同時に指定して実行する。

ダイレクトコマンドモードの例:netsh c interface ip set dns “ローカル エリア接続” dhcp

シェルモードの例:netsh interface ip> set dns “ローカル エリア接続” dhcp

          または:netsh> interface ip set dns “ローカル エリア接続” dhcp


dump

現在のコンテキストの構成を含むスクリプトを表示またはファイルに保存する。

構文 : dump [{> | >>} FileName]

FileNameでスクリプトを保存するファイルの名前を指定する (このパラメータを指定できるのはダイレクトコマンドモードのみ)。スクリプトを保存すると、そのファイルを使用して、変更された構成の設定を復元できる。パラメータを指定しない場合は、現在のコンテキストのすべての構成が画面に表示される。表示・保存される内容はコンテキストにより異なる。

実行できるコンテキスト:netsh (root)interfaceinterface ipinterface ipv6interface ipv6 6to4interface ipv6 isatapinterface portproxyroutingrouting iprouting ip autodhcprouting ip dnsproxyrouting ip igmprouting ip natrouting ip ospfrouting ip relayrouting ip riprouting ip routerdiscoveryrouting ipx routing ipx riprouting ipx saprouting ipx netbiosrasras ipras ipxras appletalkras aaaaras netbeuiras diagnosticsaaaabridge


exec

スクリプトファイルを読み込み、コマンドを実行する。

構文 : exec ScriptFile

ScriptFileは必須。読み込んで実行するスクリプトファイルの名前を指定する。

実行できるコンテキスト:netsh (root) のみ

set address

DHCPから静的モード、または静的モードからDHCPIPアドレスの構成を変更する。または静的IPアドレスを持つインターフェイスにIPアドレスまたはデフォルトゲートウェイを追加する。

構文 : set address [name=]String [source=]{dhcp | static [addr=]IPAddress [mask=]IPSubnetMask [gateway=]{none | IPAddress [[gwmetric=]Integer]}}

name : インターフェイス名を指定する。

source : 次のいずれかの値を指定する。

dhcp : 特定のインターフェイスのIPアドレスの構成元としてDHCPを設定する。

static : IPアドレスの構成元をローカルの静的構成に設定する。

: 次のオプションは、sourceが「static」に設定されている場合のみ指定できる。

addr : 指定されたインターフェイスのIPアドレスを指定する。

mask : 指定されたIPアドレスのサブネットマスクを指定する。

gateway : 次のいずれかの値を指定する。

none : デフォルトゲートウェイを設定しない。

IPAddress : 設定している静的IPアドレスに対する特定のデフォルトゲートウェイ

gwmetric : デフォルトゲートウェイのメトリックを指定する。gatewayが「none」に設定されている場合は、このフィールドを設定しない。

実行できるコンテキスト:interface ipinterface ipv6 (構文が若干異なる)

入力例 : set address name=“ローカル エリア接続” source=dhcp

入力例 : set address local static 10.0.0.9 255.0.0.0 10.0.0.1 1


set dns

DNSサーバーの構成をDHCPまたは静的モードに設定する。

構文 : set dns [name=]String [source=]{dhcp | static [addr=]{IPAddress | none}} [register=]
{none | primary | both}

name : インターフェイス名を指定する。

source : 次のいずれかの値を指定する。

dhcp : 特定のインターフェースに対するDNSサーバーの構成元としてDHCPを設定する。

static : DNSサーバーの構成元をローカルの静的構成に設定する。

: sourceに「static」が指定されている場合のみ、addrオプションを使用して、指定されたインターフェースに対するDNSサーバーのIPアドレスの静的一覧を構成できる。

addr : 次のいずれかの値を指定する。

IPAddress : DNSサーバーのIPアドレス

none : DNSサーバーの一覧を消去する。

register : 次のいずれかの値を指定する。(このパラメータはWindows XP/Server 2003でのみ利用できる)

none : 動的DNSの登録を無効にする。

primary :プライマリDNSサフィックスでのみ登録する。

both : プライマリDNSサフィックスおよび接続仕様のサフィックスの両方で登録する。

実行できるコンテキスト:interface ipのみ

入力例 : set dns name=“ローカル エリア接続” source=dhcp

入力例 : set dns “ローカル エリア接続” static 10.0.0.1


set wins

WINSサーバーの構成をDHCPまたは静的モードに設定する。

構文 : set wins [name=]String [source=]{dhcp | static [addr=]{IPAddress | none}}

name : インターフェイス名を指定する。

source : 次のいずれかの値を指定する。

dhcp : 特定のインターフェースに対するWINSサーバーの構成元としてDHCPを設定する。

static : WINSサーバーの構成元をローカルの静的構成に設定する。

: sourceに「static」が指定されている場合のみ、addrオプションを使用して、指定されたインターフェースに対するWINSサーバーのIPアドレスの静的一覧を構成できる。

addr : 次のいずれかの値を指定する。

IPAddress : WINSサーバーのIPアドレス

none : WINSサーバーの一覧を消去する。

実行できるコンテキスト:interface ipのみ

入力例 : set wins name=“ローカル エリア接続” source=dhcp

入力例 : set wins “ローカル エリア接続” static 10.0.0.1


pushd

先入れ先出し (FIFO) スタックに現在のコンテキストを保存する。

構文 : pushd

pushdpopdと組み合わせて使用すると、コンテキストの変更、新しいコンテキストでのコマンドの実行、および以前のコンテキストの再開ができるようになる。

実行できるコンテキスト:すべてのコンテキスト


popd

先入れ先出し (FIFO) スタックからコンテキストを復元する。

構文 : popd

popdpushdと組み合わせて使用すると、コンテキストの変更、新しいコンテキストでのコマンドの実行、および以前のコンテキストの再開ができるようになる。

実行できるコンテキスト:すべてのコンテキスト

入力例

次のコマンドを実行すると、ルートコンテキストがinterface ipコンテキストに変更され、静的IPルートが追加された後、ルートコンテキストに戻る。

              netsh> pushd

              netsh> interface ip

              netsh interface ip> set address local static 10.0.0.9 255.0.0.0 10.0.0.1 1

              netsh interface ip> popd

              netsh>