システム管理に役立つ“厳選”XP/Vistaコマンド活用術(2007.5.12)

 

 Windowsでは、ほとんどの管理操作をGUI (Graphical User Interface) 画面により簡単かつわかりやすい形で行うことができる。しかし、複数のマシンを一括して設定する場合、1台1台を設定するのは面倒だ。その場合、コマンドを使うとGUI画面でできないような一括操作が簡単になる。また一部の機能はGUI画面では操作できず、コマンドでのみ操作できるものもある。

 

コマンドはコマンドプロンプト画面で使う

 コマンドでの操作は、「コマンドプロンプト」を開いて、キーボードからコマンドを入力し、その結果、画面に表示される情報を見ることになる。管理操作を行うコマンドの多くが管理者権限で実行しないと正常に動作しないため、コマンドプロンプトを起動するには、Windows XPの場合は、管理者権限のあるユーザーでログオンし「スタート」メニューから「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」をクリックする。Windows Vistaの場合は、コマンドプロンプトを右クリックして「管理者として実行」をクリックして起動する。次のような画面が表示される。

 

Vistaのコマンドプロンプト画面。

 

 これはWindows Vistaのコマンドプロンプトだが、Windows XPも同様だ (バージョン表示がWindows XPに代わる)。コマンドプロンプトを終了する場合は、ウィンドウ右上の「×」マークをクリックして閉じるか、「exit」とコマンドを入力して「Enter」キーを押す。

 コマンドプロンプトで実行できるコマンドには、「内部コマンド」、「外部コマンド」、「GUIプログラム」、「バッチファイル」がある。内部コマンドはコマンドプロンプト自身が持っている機能で、基本的なコマンドが内部コマンドとして提供されている。代表的な内部コマンドには、「dir」、「cd」、「type」などがある。外部コマンドはコマンドプロンプトとは別のプログラムによって提供されるコマンドで、Windowsには多数の外部コマンドが標準で付いている。例えば、「chkdsk」、「diskcopy」、「format」などがそうだ。

 Windowsで動作するGUIプログラムもコマンドプロンプトから起動できる。例えばメモ帳はGUIプログラムだが、コマンドプロンプトで「notepad」または「notepad.exe」と入力するとメモ帳のウィンドウが起動する。バッチファイルというのは、複数のコマンドを順番に記述したテキストファイルで、拡張子に「.bat」または「.cmd」を付けて保存し、そのファイル名 (拡張子は省略可能) を入力すると、コマンドプロンプトではそれをバッチファイルと認識し、そこに記述してあるコマンドを順番に実行する。

 

テキスト ボックス: ●2つのシェルと2つのコマンドプロンプト
 コマンドプロンプトは、WindowsでCUI (Character User Interface) 環境を提供するためのシェルプログラムだ。シェルとは、ユーザーの指示をOSに伝え、その結果を画面に表示するOSにとって基本的なプログラムのことを言う。Windowsには2種類のシェルが用意されている。1つはコマンドプロンプトで、CUI環境を提供するためのもの。もう1つはエクスプローラで、こちらはGUI環境を提供するシェルだ。エクスプローラと言うと、ファイルやフォルダ、ドライブを操作するツールとしてお馴染みだが、実はエクスプローラの機能はそれだけでなく、Windowsの基本的なGUI環境がエクスプローラによって提供されている。
 またWindows XP/Vistaには、コマンドプロンプトとして2つのプログラムが用意されている。1つはcmd.exeであり、もう1つがcommand.comだ。command.comはDOSとの互換性のために残されているプログラムであり、今日ではほとんど使うことはない。本稿で利用するコマンドプロンプトはcmd.exeのことになる。

 

 コマンドプロンプトは使いやすいようにカスタマイズできる。コマンドプロンプトウィンドウの左上にあるシステムアイコンをクリックし、「プロパティ」をクリックすると「コマンドプロンプトのプロパティ」ウィンドウが開くので、ここで各種設定を変更できる。本稿では、画面を見やすくするために、このカスタマイズ機能を使って、「フォント」を「MSゴシック」に、「画面の文字」を黒色に、「画面の背景」を白色に設定している。

 

ネットワークコマンド

 ネットワークのためのコマンドは優れたトラブルシューティングツールであり、さらにはネットワークの管理ツールとしても有用だ。ネットワークコマンドを使うと、多数のPCの設定を一括して行うことができる。また指定した時間にコマンド自動的に実行したり、複数のコマンド処理を連続実行したり、同じコマンドを複数回実行するなどのバッチ処理/スクリプト処理もできる。

 

マシンのIP設定を確認する

ipconfig

ネットワークに接続できないなどのトラブルの際は、まずこのコマンドを使う。現在のTCP/IP設定を表示して問題がないかを確認したり、DHCPサーバーとDNSサーバーの設定を更新することができる代表的なコマンド。

 

書式

ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /release [adapter] | /renew6 [adapter] | /release6 [adapter] | /flushdns | /displaydns | /registerdns | /showclassid adapter | /setclassid adapter [classid]]

 

注:/allcompartments/renew6 [adapter]/release6 [adapter] のパラメータはVistaでのみ指定できる。

 

対応OSXPVista

 

 単に「ipconfig」と入力すれば、現在のIPアドレス、サブネットマスク、デフォルトゲートウェイが表示されるので、これが正しいかどうかを確認する。これが意図したとおりでない場合は、何らかの障害が発生していることになる。DHCPIPアドレスを取得している場合は、DHCPサーバーとの通信に問題があることになる。なお、Windows XPIPv6プロトコルをインストールしていない場合は、IPv6アドレスが表示されない。

 もし、「メディアは接続されていません」(Vista) や「Media disconnect(XP) と表示される場合は、アダプタおよびケーブルに何らかの障害が発生している。IPアドレスが「0.0.0.0」や「127.0.0.1」と表示されるときはIPアドレスの設定に何らかの問題がある。またIPアドレスが「169.254.xxx.xxx」と表示されるときは、DHCPサーバーが見つからなかったことになる。

 

Vistaipconfigを実行した結果。

 

 「ipconfig /all」と入力すると、より詳細な情報が表示される。DHCPサーバーやDNSサーバーのアドレスを確認するとよい。また「NetBIOS over TCP/IP」が無効になっているとネットワークコンピュータのブラウジングに問題が発生することがある。

 

Vistaipconfig /allを実行した結果 (部分)

 

 DHCPで割り当てられたIPアドレスに問題があるときは、「ipconfig /release」および「ipconfig /renew」と入力することで、IPアドレスを更新することができる。また、DNSの名前解決で問題が発生している場合は、「ipconfig /flushdns」と入力して、DNSリゾルバキャッシュを消去することで解決することがある。

 

DNS名前解決のトラブルシューティング

nslookup

IPアドレスとホスト名との関連付けを行うためのDNSサーバーによる名前解決に問題があるときに利用すると便利なコマンド。DNSサーバーの登録情報を確認できる。

 

書式

nslookup [-SubCommand ...] [ComputerToFind [DNSServer]]・・・直接モード

nslookup [-SubCommand ...] [- DNSServer]・・・・・・・・・・ 対話モード

 

対応OSXPVista

 

 DNS名前解決のトラブルを診断する際に利用できるコマンドで、DNSサーバーに登録されているレコードを参照することができる。LAN内でのDNS名前解決だけでなく、インタネット上のDNS名前解決にも利用できる。このコマンドでは直接実行する直接モードと対話的に実行する対話モードがある。名前解決したいホスト名あるいはIPアドレスを入力した場合は直接モードになり、ホスト名あるいはIPアドレスを入力しないと対話モードになる。複数のサブコマンドを連続して実行したい場合は対話モードを使うとよい。

 「nslookup ComputerToFind DNSServer」あるいは「nslookup ComputerToFind」と入力すると、直接モードで、IPアドレスあるいはホスト名で指定したComputerToFindの対応したホスト名あるいはIPアドレスを表示する。DNSServerを省略した場合はデフォルトで参照するDNSサーバーになる。もし指定したホスト名あるいはIPアドレスが見つからないと表示されたなら、DNSによる名前解決ができないことを意味するので、DNSサーバーの設定を確認するとよい。

デフォルトのDNSサーバー (192.168.3.201) LAN上のホスト名 "vm-xp-sp2" を問い合わせ、そのIPアドレスが "192.168.3.8" であるという回答を得た。

 

インターネット上のホスト名 "www.mycom.co.jp" を問い合わせ、そのIPアドレスが "210.166.238.11" であるという回答を得た。

 

インターネット上のIPアドレス "210.166.238.11" を問い合わせ、そのホスト名が "www.pc.mycom.co.jp" であるという回答を得た。

 

 「nslookup -type=ns ComputerToFind」のように-type=で問い合わせ/表示するレコードの種類を指定することもできる。typeにはACNAMEMXNSPTRSOASRVtxtなどがある。またANYと指定するとすべてのレコードを問い合わせ/表示する。

 

"mycom.co.jp" のすべてのレコードを問い合わせ、その結果を表示した。

 

通信可能をチェック

ping

通信経路に問題がある場合に、接続、到達可能性、名前解決のトラブルシューティングに使用する代表的なコマンド。リモートマシンへのIPレベルの接続を確認し、往復の伝送時間と対応するエコー応答メッセージの受信が表示される。

 

書式

ping [-t] [-a] [-n Count] [-l Size] [-f] [-i TTL] [-v TOS] [-r Count] [-s Count] [{-j HostList | -k HostList}] [-w Timeout] [-R] [-S srcaddr] [-4] [-6] [TargetName]

 

注:-R-S srcaddr-4-6のパラメータはWindows Vistaでのみ指定できる。

 

対応OSXPVista

 

 指定したマシンへインターネット制御メッセージプロトコル (ICMP) エコー要求メッセージを送信して、その応答からリモートのTCP/IPコンピュータへのIPレベルの接続を確認できる。TargetNameIPアドレスで指定するか、ホスト名で指定する。また「ping -a TargetName」と入力すると、宛先IPアドレスで逆引き名前解決を実行して、可能であればホスト名も表示する。

 

相手のIPアドレスに対してpingすると、反応があればこのように表示される。

 

相手のホスト名に対してpingすると、反応があればこのように表示される。

 

相手のIPアドレスに対して-aパラメータを付けてpingすると、名前解決ができる場合はこのように表示される。

 

 ホストによってはICMPエコー要求に反応しないように設定されている場合がある。このようなホストにpingしても反応がなく、要求がタイムアウトしたと表示される。この場合はICMPエコー要求に反応しないように設定されているのか、それとも本当にそのホストが存在しないのかはわからない。またホストが反応するように設定されていても、ルーターがICMPパケットを通さない場合もある。

 

相手ホストがICMPエコー要求に反応しないように設定されていると、このような結果になる。

 

 IPアドレスのpingに成功しても、ホスト名のpingが成功しない場合は、名前解決に問題がある可能性がある。その場合は、DNSクエリを使用するか、NetBIOSの名前解決により、指定するホスト名がローカルのHostsファイルを使って解決できることを確認する。


テキスト ボックス: ●pingの語源
 pingの語源にはいくつかの説がある。1つは、潜水艦がソナー (水中探査音) を出して、その音が反射して帰ってくるまでの時間から敵との距離を探ることを、pingを打つと言うことから、ネットワーク上の別マシンを探査するコマンドに流用されたというもの。2つ目は、銃弾などが金属に当たって跳ね返ったときに "ピーン" という音がすることから来ているという説。ただ、潜水艦のpingも、跳ね返る "ピーン" という音から来ているだろうから、その意味では同じだろう。
 もう1つの説は、pingが "Packet InterNet Groper" の略だと言う説。いずれももっともらしい説で、筆者にはどの説が正しいかは判断できないが、そんな話を知っておくのも楽しいだろう。

 

各種ネットワーク機能を集めた統合コマンド

net

Windows XP/Vistaにはnetで始まる多数のコマンド群がある。netコマンドとサブコマンドがセットになって動作する。これらはnetサービス上で動作するコマンドセットであり、いわばネットワークコマンドのスーパーマーケットだ。

 

書式

net SubCommand [Parameter]

 

対応OSXPVista

 

 netコマンドには多数のサブコマンドがある。ここではすべてのサブコマンドを紹介できないが、「net /?」または「net help」と入力するとサブコマンド一覧が表示される。

 

●net accounts

 このコマンドは、ユーザーアカウントデータベースを更新し、すべてのアカウントに対するパスワードおよびログオン要件を修正する。サーバーの現在の設定、パスワード要件、およびサーバーの役割を表示するには、「net accounts」と入力する。ユーザーアカウントのパスワードの最小文字数を7文字に設定するには、「net accounts /minpwlen:7」と入力する。パスワードを5回変更した後でないと同じパスワードを再び使えないようにし、7日以上経過しないとパスワードを変更できないようにし、30日ごとにパスワードを強制的に変更するようにし、ログオン時間が超過したときには強制ログオフされるようにし、強制ログオフの5分前に警告が与えられるようにするには、「net accounts /uniquepw:5 /minpwage:7 /maxpwage:30 /forcelogoff:5」と入力する。同じ処理をドメインコントローラに対して実行するには「/domain」オプションを追加する。

 

net accounts /uniquepw:5 /minpwage:7 /maxpwage:30 /forcelogoff:5」コマンドを実行し、「net accounts」で結果を確認。

 

●net config server

 構成可能なサーバーサービスの設定を表示/変更する。「net config server」と入力すると、現在の設定が表示される。また「net config server /hidden:yes」と入力すると、コンピュータをネットワークコンピュータの一覧に表示しないようにできる。ただしコンピュータを隠しても、そのコンピュータ上のアクセス権は変化しない。

 

net config server /hidden:yes」を実行して隠しコンピュータにした後、「net config server」で結果を確認。

 

●net start

 指定したサービスを開始する。「net start」と入力すると、現在動作しているサービスの一覧が表示される。Print Spoolerサービスを開始するには、「net start "print spooler"」と入力する。

 

net start "print spooler"」を実行してPrint Spoolerサービスを開始した。

 

●net stop

 実行中のサービスを停止し、ソフトウェアをメモリから削除する。Print Spoolerサービスを停止するには、「net stop "print spooler"」と入力する。

 

net stop "print spooler"」を実行してPrint Spoolerサービスを停止した。

 

●net file

 コンピュータで開かれているすべての共有ファイルの名前と、ファイルロックがあれば、ファイルごとにファイルロックの数を表示する。また、「/close」オプションで個々の共有ファイルを閉じ、ファイルロックを解除することができる。

 

net file」で開かれているファイルを確認し、「net file ID /close」を実行して指定したIDを持つファイルを強制的に閉じた。

 

●net session

 ローカルコンピュータに対し、リモートからアクセスしているコンピュータ名とユーザー名を表示でき、ユーザーがファイルを開いているかどうかや、各ユーザーのセッションがアイドル状態になっている時間を調べることができる。「net session」と入力すると、ローカルコンピュータとのすべての接続セッションに関する情報が表示される。コンピュータ名shepherdを持つクライアントに対するセッション情報を表示するには、「net session \\shepherd」と入力する。また、「/delete」オプションを使うと接続しているコンピュータとの間のすべてのセッションを強制終了することができる。

 

net session」でリモートからアクセスしているコンピュータを確認し、「net session /delete」を実行してすべてのセッションルを強制的に終了させた。

 

●net share

 共有リソースを管理するコマンドだ。「net share」と入力すると、ローカルコンピュータ上で共有されているすべてのリソースに関する情報が表示される。コンピュータのディレクトリC:\Dataを共有名 "ShareData" で共有するには、「net share ShareData=c:\Data」と入力する。作成した "ShareData" フォルダの共有を停止するには、「net share ShareData /delete」と入力する。

 

net share ShareData=c:\Data」で共有を設定し、「net share」で確認、さらに「net share ShareData /delete」で削除した。

 

●net use

 コンピュータを共有リソースに接続、コンピュータを共有リソースから切断、またはコンピュータの接続に関する情報を表示する。「net use」と入力するとネットワーク接続の一覧が表示される。ディスクドライブのデバイス名 "x:" をサーバー\\ath64-2k3x64上の共有ディレクトリDataに割り当てるには、「net use x: \\ath64-2k3x64\Data」と入力する。これで、サーバー\\ath64-2k3x64上の共有ディレクトリDataにアクセスする際には長い名前を入力しなくても、x:だけでローカルドライブのようにアクセスできるようになる。以後の変更に関係なく、ログオンするたびに現在の接続を復元するには、「net use /persistent:yes」と入力する。共有ディレクトリDataから切断するには、「net use x: /delete」と入力する。

 

net use x: \\ath64-2k3x64\Data」で共有をドライブ名に割り当て、「net use」で確認、さらに「net use x: /delete」でドライブ名への割り当てを解除した。

 

●net user

 「net user」コマンドは、ユーザーアカウントを表示・追加・編集・削除するための極めて有用なコマンドだ。ユーザーアカウントの操作はGUI画面でもできるが、その場合はユーザーを一人一人操作しなければならないので、例えば人事異動の時期などで大量のユーザーを操作するには不向きだ。「net user」コマンドを必要な数だけバッチファイルに記述しておけば、一発で実行できる。

 単に「net user」と入力するとコンピュータのユーザーアカウントの一覧が表示される。ユーザーアカウント "Yamada" に関する情報を表示するには、「net user Yamada」と入力する。

 ローカルユーザーアカウントを追加登録するには「net user UserName Password /add」と入力する。ドメインユーザーアカウントを追加登録するには「net user UserName Password /add /domain」と入力する。これを必要な数だけバッチファイルに記述すればよい。

 この方法では新規にユーザーを追加する際に、暫定的なパスワードを記述しているが、大量のユーザーを追加する場合はパスワードを考えるのも大変だ。しかし、「/random」オプションを使うと自動的にランダムに生成したパスワードを付与することができる。このオプションはヘルプにも記述されていない隠しオプションだが、なかなか便利なオプションだ。ただし、生成されるパスワードは8文字なので、パスワードのポリシーでパスワード文字数を9文字以上必要に設定している場合は利用できない。

 「/random」オプションを使う場合は、生成されたパスワードを控えておき、ユーザーに通知する必要がある。画面に表示されるパスワードをいちいち手書きするのは面倒なので、画面メッセージをファイルにリダイレクトするのが利口な方法だ。こうしたこともコマンドならではの利点だ。コマンド例は次のとおり。これをバッチファイルに記述する。

net user UserName1 /random /add > TextFileName

net user UserName2 /random /add >> TextFileName

  

  

 最初のリダイレクトには「>」を使い、2つ目以降には「>>」を使うのが注意点だ。全部「>」にしてしまうと、最後のユーザーのパスワードだけしか保存されないので気をつけて欲しい。

 これをもう一ひねりして、

@echo off

net user UserName1 /random /add

net user UserName2 /random /add

  

  

というバッチファイル (仮にaddpass.batというファイル名とすると) を作成し、コマンドプロンプトに「addpass > TextFileName」と入力することでも同じ結果が得られる。

 ユーザーアカウントの追加の際に、より詳細な設定を行うこともできる。例えば、Yamadaのユーザーアカウントを追加し、その際、月曜日から金曜日の午前8時から午後5時の間にログオンする権利を与え、パスワード (Yama123Ichi) が必須である設定にし、フルネーム (Ichiro Yamada) を指定するには、「net user Yamada Yama123Ichi /add /passwordreq:yes /times:monday-friday,8am-5pm /fullname:"Ichiro Yamada"」と入力する。ユーザーYamadaを削除するには「net user Yamada /delete」と入力する。

 ユーザーのパスワードを変更する場合は、「net user UserName Password」または「net user UserName Password /domain」を使う。特にユーザーが自分のパスワードを忘れて管理者に泣きついてくることが頻繁にあるので、管理者ならパスワードの変更方法を覚えておこう。このコマンドでパスワードを明示的に指定する代わりに、「*」を指定する手もある。この場合はパスワードの入力を促すメッセージが表示されるので、適当なパスワードをキー入力する。そのパスワードは画面に表示されないので、しっかり控えておこう。

 ユーザーがパスワード入力を何度か間違えたためにロックアウトされてログオンできなくなったと泣きつくこともよくある。一度ロックアウトされると、一定時間後にならないとログオンできない。その場合は「net user UserName /active:yes」または「net user UserName /active:yes /domain」でロックアウトを解除することができる。ネットワーク管理者ならよく使うことになるので覚えておこう。

 

net user Yamada Yama123Ichi /add /passwordreq:yes /times:monday-friday,8am-5pm /fullname:"Ichiro Yamada" /domain」でドメインにユーザーを追加し、「net user /domain」で確認、さらに「net user Yamada /delete /domain」でユーザーを削除した。

 

●net view

 ドメイン、コンピュータ、または指定したコンピュータ上で共有されているリソースの一覧を表示する。「net view」と入力すると、現在のドメイン内のコンピュータの一覧が表示される。「net view /domain」と入力すると、ネットワーク上のドメインの一覧が表示される。コンピュータ\\ath64-2k3x64が共有しているリソースの一覧を表示するには、「net view \\ath64-2k3x64」と入力する。コンピュータ\\ath64-2k3x64の共有リソースを全部表示するときは、「net view \\ath64-2k3x64 /all」と入力する。NetWareサーバー\\Marketingで利用できるリソースを表示するには、「net view /network:nw \\marketing」と入力する。salesドメインまたはsalesワークグループのコンピュータの一覧を表示するには、「net view /domain:sales」と入力する。

 

net view \\ath64-2k3x64 /all」と入力して全共有リソースを表示した。