システム管理系コマンド

 残念ながらWindows XP/Vistaではシステム管理系のコマンドが充実しているとはいい難い。システム管理の機能の多くはGUI画面でしか操作できないことが多い。新サーバーOSであるWindows Server 2008では、この点が大幅に改善されている。ここでは、そうした現状でのWindows XP/Vistaの数少ないコマンドの中でも特に有用なコマンドを紹介する。

 

プログラムをスケジュール実行する

at

指定された日時にコマンドやプログラムがコンピュータで実行されるようにスケジュールする。

 

書式

at [\\ComputerName] [{Hours:Minutes [/interactive] [{/every:Date[,...] | /next:Date[,...]}] "Command" | id [/delete] | /delete [/yes]}]

 

対応OSXPVista

 

 atコマンドは、ローカルまたはリモートのコンピュータで定期的に実行したいタスクをスケジュールするためのコマンドだ。単に「at」と入力すると、現在スケジュールされているタスクを表示する。ここでidが表示されるので、削除したい場合はこのidを指定する。「at id」と入力すると、そのid番号を持つタスクの詳細が表示される。

 ath64-2k3x64サーバーのハードディスクを5日目ごとの午前0時にテープドライブにバックアップするには、バックアップコマンドが含まれているArchive.cmdというバッチファイルを作成してから、そのバッチファイルの実行をスケジュールするために、「at \\ath64-2k3x64 00:00 /every:5,10,15,20,25,30 archive」と入力する。

 

at \\ath64-2k3x64 00:00 /every:5,10,15,20,25,30 archive」でスケジュールしたタスクを「at」で確認し、「at id」で詳細を表示した。

 

 atコマンドでスケジュールしたコマンドは、バックグラウンドプロセスとして実行され、/interactiveオプションがない場合は、出力は画面には表示されないので、出力を見たい場合はファイルにリダイレクトすればよい。出力をファイルにリダイレクトする場合は、コマンドラインまたはバッチファイルのいずれで実行する場合でも、リダイレクト記号の前にエスケープ記号 (^) を入力する必要がある。たとえば出力をOutput.textにリダイレクトするには「at 14:45 c:\test.bat ^> c:\output.txt」と入力する。

 スケジュールされたタスクでネットワークにアクセスする場合は「at 1:00pm my_backup x:」のように、リダイレクトされたドライブを使用すると意図した動作をしないことがある。スケジュールサービスはリダイレクトされたドライブにアクセスできなかったり、またはスケジュールされたタスクの実行時に別のユーザーがログオンしていると、それらのドライブが利用できない可能性がある。そこで、スケジュールするタスクにはUNCパスを使用すればよい。たとえば「at 1:00pm my_backup \\server\share」のように入力する。

 ドライブ文字を使って共有ディレクトリに接続するatコマンドをスケジュールする場合は、使用した後にドライブを切断するatコマンドを含めること。ドライブが切断されないと、割り当てられたドライブ文字は、コマンドプロンプトから利用できない。

 デフォルトでは、atコマンドを使用してスケジュール設定されたタスクは48時間後に停止する。このデフォルト値を変更するには、レジストリエディタを使って、次のレジストリを変更する。Windows Vistaの場合は "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule" "AtTaskMaxHours" の値のデータを "0" に変更する。これで制限なし、つまり停止しないことになる。Windows XPの場合はデフォルトでこのキーが存在しないので、「編集」→「新規」→「DWORD値」で作成する。

 

レジストリエディタで "AtTaskMaxHours" の値のデータを "0" にする。

 

 atコマンドを使用するにはSchedule サービスが実行中でなければならない。また、atコマンドは、コマンドの実行前にコマンドインタープリタCmd.exeを自動的には読み込みまないので、実行可能ファイル以外のファイルを実行する場合には、「at 12:00 cmd /c dir ^> c:\test.out」のようにコマンドの前にcmd /cを付けてCmd.exeを読み込む必要がある。

 

有効なポリシー設定を確認

gpresult

RSoP (ポリシーの結果セット) 情報を表示し、特定のユーザーまたはコンピュータに対して有効なポリシー設定を確認することができる。

 

書式

gpresult [/s ComputerName [/u UserName [/p Password]]] [/scope Scope] [/user TargetUserName] [{/v | /z}]

 

対応OSXPVista

 

 ある程度以上のネットワーク環境ではグループポリシーを使ったユーザー管理が行われているはずだ。しかし、実際にどのようなグループポリシーが設定され、適用されているかは把握しにくい。gpresultは、実際のグループポリシーの適用結果RSoP (ポリシーの結果セット) を表示・確認するためのコマンドだ。

 単に「gpresult」と入力した場合は、コマンドを実行しているコンピュータに現在ログオンしているユーザーのRSoPデータが表示される。リモートのコンピュータからデータを取得する場合は/sオプションでリモートコンピュータを指定する。ただし、ファイアウォールでRPCポートが閉じられていると情報を取得できない。/u/pにはリモートコンピュータにログオンするユーザーの名前とパスワードを指定する。パスワードを省略すると「パスワードを入力してください」と入力を求められる。/scopeには "user" または "computer" を指定する。/vを指定すると詳細な情報が表示され、/zではさらに詳しい情報が表示される。リモートコンピュータvm-xp-sp2のユーザーITAYAに関するポリシーを確認するには「gpresult /s vm-xp-sp2 /u Administrator /user vm-xp-sp2\ITAYA」と入力する。

 なお、このコマンドに実行には少し時間がかかる。また結果は相当の量になるので、画面で確認するには向いていない。ファイルにリダイレクトして保存するのがよい。

 

gpresult /s vm-xp-sp2 /u Administrator /user vm-xp-sp2\ITAYA」と入力した結果 (一部)

 

一時的に管理者となる

runas

一時的にログオンユーザーとは別のユーザー権限でプログラムを実行したい場合に使う。このコマンドを使うと、別のユーザーでログオンしなおす手間が省ける。

 

書式

runas {[{/noprofile | /profile}] [/env] {[{/savecred | /netonly}] /user:UserName | /smartcard [/user:UserName]} | /trustlevel:TrustLevel} Program

 

注:/trustlevelオプションはWindows Vistaでのみ利用できる。

 

対応OSXPVista

 

 PCを使う場合、セキュリティを確保するために、通常は制限ユーザーとしてログオンして使い、管理者権限が必要になったときだけ管理者としてログオンしなおすということはよくあることだが、runasコマンドを使うと、制限ユーザーとしてログオンしたままで、管理作業を行うプログラムを管理者として起動することが可能になる。したがって改めて管理者としてログオンしなおす手間が省けることになる。

 もっとも、Windows Vistaでは、普段から管理者としてログオンしておけば、通常の作業には制限ユーザーと同等の権限しか持てないので、runasコマンドを使う必要はあまりないかもしれない。Windows XPでは非常に有用なコマンドだ。

 runasコマンドではパスワードはあらかじめ指定しないが、コマンドを実行するとパスワードを聞いてくるので、そこで入力する。

 

制限ユーザーとして起動したコマンドプロンプトから、runasコマンドを使ってAdministrator権限のコマンドプロンプトを起動した (Windows XPの例)

 

テンプレートを使ったセキュリティ設定

secedit

セキュリティテンプレートとコンピュータのセキュリティ設定との比較、分析、設定を行う。

 

書式

secedit [{/configure | /analyze | /import | /export | /validate | /generaterollback} Parameter]

 

注:/importおよび/generaterollbackオプションはWindows Vistaでのみ利用できる。

 

対応OSXPVista

 

 セキュリティデータベースの内容をテンプレートにエクスポートしたり、テンプレートからインポートしたり、データベースとテンプレートを比較したりできる。あらかじめ用意されているテンプレートを利用すれば、セキュリティのどこに問題があるかが容易に分析できる。また、セキュリティデータベースやテンプレートを作成することもできるので、大量のクライアントマシンのセキュリティに一括して適用することができる。

 データベースsecedit.sdbをテンプレートDefaultSecurity.infにエクスポートするには「secedit /export /db c:\windows\security\database\secedit.sdb /cfg DefaultSecurity.inf」と入力する。またデータベースDefault Security.sdbをテンプレートDefaultSecurity.infと比較・分析するには「secedit /analyze /db "c:\windows\security\database\Default Security.sdb" /cfg DefaultSecurity.inf」と入力する。結果はログファイルに記録される。

 

secedit /export /db c:\windows\security\database\secedit.sdb /cfg DefaultSecurity.inf」でエクスポート、「secedit /analyze /db "c:\windows\security\database\Default Security.sdb" /cfg DefaultSecurity.inf」で比較した。

 

コンピュータの基本システム構成情報を取得する

systeminfo

ローカルまたはリモートのコンピュータのハードウェアやOSなどの基本システム情報を表示する。

 

書式

systeminfo [/s Computer [/u UserName [/p Password]]] [/fo Form] [/nh]

 

対応OSXPVista

 

 リモートマシンのハードウェアやOS、セキュリティ情報などの基本システム情報を取得・表示する。/sオプションが指定されない場合はローカルマシンの情報を表示する。/uオプションでユーザー名を指定し、/pオプションを省略した場合は、「パスワードを入力してください」と入力を求められる。/foオプションには "table""list""csv" のいずれかの出力形式を指定する (デフォルトはlist)。情報量が多いので通常はリダイレクトでファイルに保存する。なお、RPCポートがファイアウォールでブロックされていると情報を取得できない。

 取得できる情報は、ホスト名から、OSのバージョン、インストールされているホットフィックス、プロダクトIDBIOSCPUの種類、メモリ、ハードディスク、ネットワークカードなどだ。リモートサーバーath64-2k3x64Administratorとして接続して、list形式の情報を取得するには「systeminfo /s ath64-2k3x64 /u Administrator」と入力する。

 

systeminfo /s ath64-2k3x64 /u Administrator」と入力した結果 (一部)

 

実行中のプロセスを表示

tasklist

ローカルまたはリモートのコンピュータで実行されているプロセスの一覧を表示する。

 

書式

tasklist [/s Computer [/u UserName [/p [Password]]] [{/m [Module] | /svc | /v}] [/fi Filter] [/fo Form] [/nh]

 

対応OSXPVista

 

 リモートマシンで実行されているタスク (プロセス) 情報を取得・表示する。/sオプションが指定されない場合はローカルマシンの情報を表示する。/uオプションでユーザー名を指定し、/pオプションを省略した場合は、「パスワードを入力してください」と入力を求められる。なお、RPCポートがファイアウォールでブロックされていると情報を取得できない。

 /mオプションを指定すると、指定されたexe/dll名を使用しているタスクをすべて表示する。モジュール名が指定されない場合は、読み込まれているモジュールすべてを表示する。/svcを指定すると、各プロセスをホストしているサービスを表示する。/vを指定すると詳細なタスク情報を表示する。/foオプションには "table""list""csv" のいずれかの出力形式を指定する (デフォルトはlist)

 リモートサーバーath64-2k3x64Administratorとして接続して、詳細なlist形式の情報を取得するには「tasklist /s ath64-2k3x64 /u administrator /v」と入力する。

 

tasklist /s ath64-2k3x64 /u administrator /v」と入力した結果 (一部)

 

動作中のプロセスを終了させる

taskkill

リモートから不審なプロセスやフリーズして終了できなくなったプロセスを強制終了させることができる。

 

書式

taskkill [/s Computer [/u UserName [/p Password]]] {/fi Filter | /pid PID | /im ImageName} [/t] [/f]

 

対応OSXPVista

 

 リモートマシンで実行されているタスク (プロセス) を終了させる。不審なタスクが動作している場合や、フリーズして終了ができなくなったタスクを強制終了させることもできる。/sオプションが指定されない場合はローカルマシンが指定されたものとみなす。/uオプションでユーザー名を指定し、/pオプションを省略した場合は、「パスワードを入力してください」と入力を求められる。なお、RPCポートがファイアウォールでブロックされているとタスクを終了させることができない。

 終了させるタスクは、/fiまたは/pidまたは/imで指定する。PIDやイメージ名はtasklistコマンドで知ることができる。/tオプションを指定すると、指定したプロセスとそのプロセスが開始したすべての子プロセスを終了させる。また、/fオプションを指定するとプロセスを強制終了させることができる。

 リモートサーバーath64-2k3x64Administratorとして接続して、PID3928のプロセスを強制終了させるには「taskkill /s ath64-2k3x64 /u administrator /pid 3928 /f」と入力する。

 

taskkill /s ath64-2k3x64 /u administrator /pid 3928 /f」と入力してPID3928のプロセスを強制終了させた。