Saturday, December 27, 2008
■ Windows Vista で利用できるちょっとマイナーかもしれない便利なコマンドたち

http://d.hatena.ne.jp/amachang/20081219/1229674783
d:id:amachang が Windows で使えるコマンドをまとめていたのをみて、いつかまとめを書こうと思っていた知ってる人は知っている(多分 Windows 管理者系の人は大体知っている気がする)けど微妙に知られていなさそうなものを書いてみました。一部は XP でも利用できたり、Robocopy などはリソースキットに入っていたりして XP でも使えるものもあります。
ちょっと読みづらいかも。
よくわからない
clip
標準入力のテキストをクリップボードにコピーします。例えば次のように使います。なんでペーストはないんでしょうね。
dir | clip
path
環境変数 PATH を設定します。何の役に立つのかよくわかりません。
mstsc /console, /span
mstsc.exe というのはリモートデスクトップです。
/console オプションを指定して起動するとコンソール(つまり物理マシンでログインしたときのデスクトップ)に接続できます。これは Windows Server のマシンに直接ログオンしたまま別なマシンから接続してそのデスクトップセッションを引き継ぎたい時に使えます。もちろんあとからでもアタッチできるのですが一発でできるので便利ですね。
/span はマルチモニタを利用している場合向けのオプションです。(参考: http://www.atmarkit.co.jp/fwin2k/win2ktips/903rdpspan/rdpspan.html)
コマンド支援
バッチファイルなどで使える系などです。
timeout
指定した時間処理を一時停止します。わかりやすくいうと sleep です。よく ping を使って待ち時間を作るという技があるのですがそういったことをしなくても普通に待つことができます。
C:\> timeout 10 10 秒待っています。続行するには何かキーを押してください ...
waitfor
シグナルを受信するまで待ったり・シグナルを発射したりできます。バッチファイル間などの処理待ちの調整などに利用できます。なお、シグナルというのはUNIX的なそれではありません。
例えばバッチファイルAで
echo シグナル Hauhau を待機しています waitfor Hauhau echo シグナル Hauhau を受け付けました
として起動すると「シグナル Hauhau を待機しています」で止まります。そして別なコマンドプロンプトなどから
waitfor /SI Hauhau
と打つと、先ほどの止まっている方で「シグナル Hauhau を受け付けました」というメッセージが表示されます。
winrs
WS-Management(つまりHTTP/HTTPSのウェブサービス)を介したリモートコマンドプロンプトです。
相手側がWindows Server 2008やVistaであり、サービスが有効になっていればリモートからコマンドプロンプトを利用できます。
find または findstr
いわゆるgrepです。UNIX的なアレとは同じ名前で違うものなので注意ですね。
findは正規表現を利用できませんがfindstrは正規表現を利用できます。
ファイル操作
ファイル操作や一覧などで役立つかもしれないコマンドです。
tree /f
ファイル名も含めてツリーを表示します。ファイルリストを簡単に作りたいときに便利です。
robocopy
高性能ファイルコピー・移動ツールです。Windows ファイルシステムに対して利用できるrsyncのようなものだと思えばわかりやすいです。
フォルダ間の同期、特定日以降に更新されたファイルのみコピー、再試行など様々な条件を指定してコピーできる優れものです。
Windows ファイルシステム(含むファイル共有)間で同期を取る場合などには大変役に立ちます。無駄に高性能なので一度 /? でヘルプをご覧ください。
あ、そうそう、再試行は何故か「既定値は 1,000,000」とかになっているのでちょっと注意です。
mklink
シンボリックリンクを作成するコマンドです。
bitsadmin
BITS (Background Intelligent Transfer Service)のフロントエンドです。BITS とは Windows Update などで利用されている Windows が良い感じにバックグラウンドでファイルをダウンロードしてくれる仕組みです。
ダウンロードするにはまずジョブを作成します。
C:\>bitsadmin /create "Download .NET Framework"
BITSADMIN version 3.0 [ 7.0.6001 ]
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
Created job {9CDD2D5B-B787-43BC-BF6D-A4ECC19FB873}.
ジョブにダウンロードしたいファイルのURLをセットするには /addfile を指定して、第一引数にジョブ名、第二引数にURL、第三引数に保存先を指定します。URLをセットした段階ではまだダウンロードは開始されていません。
C:\>bitsadmin /addfile "Download .NET Framework" http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe %USERPROFILE%\Downloads\dotnetfx35.exe BITSADMIN version 3.0 [ 7.0.6001 ] BITS administration utility. (C) Copyright 2000-2006 Microsoft Corp. Added http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe -> C:\Users\Tomoyo\Downloads\dotnetfx35.exe to job.
ジョブを開始するには /resume を指定します。なお、/transfer オプションでは addfile と resume をいっしょに実行したのとおなじです。
C:\> bitsadmin /resume "Download .NET Framework" BITSADMIN version 3.0 [ 7.0.6001 ] BITS administration utility. (C) Copyright 2000-2006 Microsoft Corp. Job resumed.
ダウンロード状況は /listfiles (ファイルごとの転送状態) や /info (ジョブの状態) で表示できます。
C:\>bitsadmin /listfiles "Download .NET Framework" BITSADMIN version 3.0 [ 7.0.6001 ] BITS administration utility. (C) Copyright 2000-2006 Microsoft Corp. 2959376 / 2959376 WORKING http://download.microsoft.com/download/0/6/1/061F001C-8752-4600-A198-53214C69B51F/dotnetfx35setup.exe -> C:\Users\Tomoyo\Downloads\dotnetfx35setup.exe 74544414 / 242743296 WORKING http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe -> C:\Users\Tomoyo\Downloads\dotnetfx35.exe Listed 2 file(s).
/monitor を指定すると一覧で状況を自動更新しつつ確認できます。
C:\>bitsadmin /monitor
MONITORING BACKGROUND COPY MANAGER(5 second refresh)
{9CDD2D5B-B787-43BC-BF6D-A4ECC19FB873} 'Download .NET Framework' TRANSFERRED 2
終了したジョブを削除するには /complete を指定します。
C:\>bitsadmin /complete "Download .NET Framework" BITSADMIN version 3.0 [ 7.0.6001 ] BITS administration utility. (C) Copyright 2000-2006 Microsoft Corp. Job completed.
他にも一時停止やキャンセル、プライオリティの指定やリトライ設定等々があるのでこちらもヘルプをご参照ください。
fsutil
ファイルシステムにまつわる情報を得たり操作したりできます。お世話になりそうなのは fsutil hardlink でハードリンクを作成するときぐらいでしょうか。
他はマニアックなオプションばかりですというか気をつけないとよろしくないことがおこるかもしれません。ですので動作には管理者権限を必要とします。
icacls または cacls
ACL を操作するコマンドです。XP までは CALCS だったのですが Vista 以降はパワーアップした ICACLS を利用します。ちなみに Vista で CACLS を叩くと動作はしますが、ICACLS を使ってねというメッセージが表示されます。
さて、CACLS はそんなに知名度が低いわけでもなくACLを操作するだけで何がオススメなのかという感じなのですが、Vista の ICACLS では実行権限(UNIX系でいうx)の操作ができるのとVista の保護機能にまつわるアクセスラベルをつけることができるのが面白いです。
実行権限の操作についてですがまさに chmod -x hauhau などと同じことができます。どういうことでしょう?例えば以下のようなことが実現できます。
C:\Users\Tomoyo\Desktop\Test>pscp -V pscp: Release 0-58-JP_Y-2005-05-20 C:\Users\Tomoyo\Desktop\Test>icacls pscp.exe /deny Tomoyo:(X) 処理ファイル: pscp.exe 1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした C:\Users\Tomoyo\Desktop\Test>pscp -V アクセスが拒否されました。 C:\Users\Tomoyo\Desktop\Test>type winscp.exe MZ(バイナリなので化けるが内容は読み取れている)
実行権限を落としたところ pscp.exe を実行できなくなりました。
では Explorer からダブルクリックで実行するとどうでしょうか?もちろんちゃんと「指定されたデバイス、パス、またはファイルにアクセスできません。アクセス許可がない可能性があります。」と表示され実行できなくなります。すばらしいです。
もう一つ、Vista ではプロセスに Integrity Level というものがありフォルダに対して、そのレベルを元にアクセスできたりできなかったり制御できます。わかりやすいのがIEの保護モードです。IEの保護モードでは Low となっているので Low 扱いなフォルダにしか書き込みできないのですね。
IEが書き込めるフォルダ AppData\LocalLow のACLを表示すると以下のようになります。
C:\>icacls %USERPROFILE%\AppData\LocalLow
C:\Users\Tomoyo\AppData\LocalLow MISUZILLA\tomoyo:(F)
MISUZILLA\tomoyo:(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
BUILTIN\Administrators:(F)
BUILTIN\Administrators:(OI)(CI)(IO)(F)
Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
"Mandatory Label\Low Mandatory Level" というものがみえます。これが Integrity Level に対して影響していて、ここでは Low Mandatory Level に許可があるということですね。
C:\>icacls TestFolder /setintegritylevel (CI)(OI)H
などと管理者権限で実行すると Integrity が High のもののみ書き込めるようになります。まあ一般ユーザが使うのに High なアプリはないので役には立たないですが。
takeown
ファイルの所有者を自分自身にしたりAdministratorにしたりというツールです。例えばシステムファイルを書き換えようと思ったときに一時的に所有者を変更して、また戻すなどと言う使い方ができます。
システム設定操作
reg
レジストリをコマンドから追加・削除・変更・参照などできます。.reg ファイルに頼らずともコマンドから操作できるということです。
エクスポートしたりインポートしたりとやはり機能が無駄に豊富なのでヘルプをご参照ください。
ftype または assoc
assoc はファイルの拡張子に対してファイルの種類を割り当てたり一覧したりするコマンドです。
一方、ftype はファイルの種類に対して起動するアプリケーションを割り当てたり一覧したりするコマンドです。
両方とも割り当てるものを指定しないと一覧が表示されます。
例は ftype のヘルプに書いてある Perl スクリプトのものがわかりやすいです。
たとえば、
ASSOC .pl=PerlScript
FTYPE PerlScript=perl.exe %1 %*
と入力すると、次のように Perl スクリプトが起動されます。
script.pl 1 2 3
schtasks
タスクスケジューラを操作するコマンドです。
netsh
ネットワーク関係の設定をシェルベースで行えるコマンドです。ほぼ大体の設定ができると思います。
特に Windows Server 2008 の Server Core とかではお世話になります。
diskpart
ディスクの操作をシェルベースで行うコマンドです。
フォーマットしたりボリュームパーティションを切ったりとかそういうやつです。次世代 fdisk みたいな。
bcdedit
起動方法を設定するコマンドです。Vista からは boot.ini じゃないのです。
w32tm
時刻をネットワークのNTP/SNTPサーバと同期する設定を行うコマンドです。
C:\>w32tm /config /update /manualpeerlist:ntp.jst.mfeed.ad.jp
コマンドは正しく完了しました。
C:\>w32tm /resync
再同期コマンドをローカル コンピュータに送信しています
コマンドは正しく完了しました。
C:\>w32tm /monitor /computers:ntp.jst.mfeed.ad.jp
ntp.jst.mfeed.ad.jp[210.173.160.87:123]:
ICMP: 12ms 遅延
NTP: -9.1736175s ローカル コンピュータの時刻からのオフセット
RefID: fs-monntp2.mfeed.ad.jp [210.173.160.86]
階層: 2
プロセス操作
tasklist
プロセス一覧を表示します。ps コマンドみたいなものですね。
taskkill
プロセスを終了させます。 /f で強制終了、/im foobar.exe で foobar.exe というファイル名のプロセスをすべて終了です。
例えば以下のように使うと比較的便利です。
C:\>taskkill /f /im iexplore.exe
wmic process
このコマンドもプロセス一覧ですが、wmic コマンドのサブコマンドであるのとプロセスが起動されたときの引数まで表示できる点が異なります。
システム情報取得(または操作)
driverquery
ドライバの一覧を表示します。
systeminfo
システムの情報(オペレーティングシステムやプロセッサ、HotFixの情報など)をまとめて一覧に出力します。
sc
サービスを一覧・操作するコマンドです。一覧を得たり、開始したり停止したりその他 NET コマンドより細かい操作ができます。
C:\>sc query MSSQL$SQLEXPRESS
SERVICE_NAME: MSSQL$SQLEXPRESS
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
wmic
WMIのコンソールインターフェースです。WMIから得ることのできる情報を表示できるので systeminfo コマンドなどで得られる情報は大体カバーできます。
プロセス一覧やCPU使用率などなどやはり無駄に盛りだくさんなのでヘルプをご参照ください。結構面白いかもです。
シャットダウン・再起動
shutdown
名前の通りのコマンドです。休止とかログオフとかプロセスの強制終了とかいろいろオプションがあります。
例えば即座にシャットダウンするなら次のように実行します。
C:\>shutdown /s /t 0
追記情報
MS-DOSの頃からあるコマンドですが、これないとOS動きませんよ。
超重要です。
環境変数pathは実行ファイルの検索パスの場所を書くものです。
使いたいソフトがc:\hogehoge\fugafuga.exeの場合、
PATHにc:\hogehogeを追加すればコマンドプロンプトのどこからでもfugafuga.exeが起動できます。
起動ディレクトリが現在のディレクトリになることに注意。
いつもPATHに追加しておきたい場合はシステムのプロパティ内の環境変数の項目から設定しましょう
で任意の大きさのファイルが作成できます。中身は空データなので圧縮すれば1KBくらい。1GBのファイルもすぐ作れるのでパフォーマンス検証のときに便利です。
おー。本当ですね。MS-DOS 6.20 でも試したらありました。
でもやっぱり何の役に立つのかよくわからないですね…。SET PATH=ほにゃらふにゃら とは別にわざわざコマンド(コマンドプロセッサ組み込みっぽい?)となっている意味が謎です。
> id:sucelie さん
あ、ごめんなさい。書き方が悪かったのですが mudazukai さんへの返信コメントに書いたようにSETを利用した環境変数への設定とは別にわざわざコマンドを用意しているのは何故なのかなと思ったのでした。
> id:teraco さん
そういえばそんなものも。空ファイルを作ろうと思ったことがなかったので忘れてました(でもsparseとかは覚えていました)が、確かにパフォーマンス検証の時に便利そうですね。なるほど参考になります。