NTips (2k/XP Tips)


苦楽(苦苦?)を共にして勝ちえたNTのTipsを集めてみました。とかなんとかいって覚え書きに過ぎませんが。
基本的なものは全てWin2kでも使えます。Win2kで使えないものは本文中に使えない、意味がないなどと記述しました。

  1. ネットワークコンピュータから自分のマシンを見えなくする
  2. NTで現在の日付がディレクトリ名のディレクトリを掘りたい
  3. NTのリソースキットのSU.EXEを使う
  4. 使用中のロックされているシステムのDLLを入れ換える
  5. バッチファイルに渡された8+3ファイル名を、バッチファイルの中で元に戻す
  6. コマンドプロンプトでファイル名補完がしたい
  7. pagefile.sysの場所を移動する。
  8. Win2kとWinXPで、telnetd(telnet server)を起動する。

ネットワークコンピュータから自分のマシンを見えなくする。

同セグメントのLAN環境が大きくなり、勝手気ままにみんながサーバサービスを立ち上げると、ネットワークコンピュータを参照するときに遅くなったり探しづらかったりします。できればサーバだけネットワークコンピュータに表示したいもの。クライアントマシンのサーバサービスを落とせば良いのですが、ちょっとした用途でSERVERサービスは入れておきたい。

ネットワークコンピュータから自分のマシンを見えなくするTipsです。

net config server /hidden:yes

ただし、ブラウズマスタのリストから消されるまで1時間ぐらいかかるはかかるので、すぐには消えません。 この方法は95/98では使えませんが、ネットワークコンピュータのプロパティのファイルやプリンタの共有(サーバサービス)を削除すれば当然消えます。 95/98ではメッセージの受信などは他のサービスで行うので、フォルダを共有したりしていない場合はこの機能は削ってもよいとは思います。というかできればLANの中に9x系をいれたく無いのが管理者の本音でしょうけど……。

PageTop Index


NTで現在の日付がディレクトリ名のディレクトリを掘りたい。

UNIX(譲りのSHELL)なら"`"が使えるので、

mkdir `date "+%Y%m%d"`

とやれば日付のディレクトリが掘れます。逆クォートが使えるのがGood。でもNTでもできないわけじゃないです(9xは無理)。

mkdir bkup_tmp

for /f "tokens=1,2,3 delims=/ " %a in ('date /t') do ren bkup_tmp %a%b%c

と行うとOK。バッチファイルでは%aを%%aと行うこと。NTの古いバージョンには日本語モードのdateコマンドに2バイトコード系のバグがあります。SP4か5移行で治っていますしWin2kでは問題ありません。該当のSPを使っている人はSPをあげるるか、USモードでスクリプトを動かすとよいでしょう。

unixな方は上記のコマンドはxargs -n1とawkの合わせ技に近いことがわかると思います。だからよく見てみるとawkとxargsをunixで使いこなしている人には何て事はないコマンドのはず。

NTにはunixのshellがいくらでも動作しているのでそういうのを持ってきても良いと思います。ただ当然NTのUNIXコマンドツール郡がインストールされていない環境では使えません。たとえばNTサーバからエクスポートするログインスクリプト中に記述し、ログインしたユーザたちの権限である種のプログラムを動かすには少将工夫が必要です。

path \\nt-server\share\bin;%Path%

とかやって共有サーバのシェアディレクトリに強引にPATHを通して実行することもできますが、NTならではの使い方を覚えておいて損は無いでしょう。

PageTop Index


指定したフォルダよりも下を削除したい

エクスプローラを使ったり、UNIXツールをつかってrm -rfをすれば問題なく同じことができます。しかし同様のバッチの中で使うには同じようにforの応用で出来ます。

for /r x:/hoge/ %i in (.) do @rd %i > nul

バッチにするなら%iを%%iにするよう、気をつけて。


NTのリソースキットのSU.EXEを使う。

NTを知らないUNIXフリークが「NTにはsuが無いから」と言っていた(書き込みしていた?)とを見たことがあります。NTは(使える)suが無いからというのならば正当ですが無いわけではありません。ちゃんとリソキに入っています。が、使い方は難しいです。マニュアル英語だしインストールは手動だし、あまり使ったことがある人はいないかもしれません。※suとは別のユーザになるコマンドです念のため。

使用法

  1. RESKITをインストールする。
  2. ユーザマネージャで使用するユーザに次の権利を付加する。(原則-ユーザの権利の追加を実行し、高度な権利の表示も出すこと)
  3. SUのコマンドラインを覚える。

2を行ったら念のためリブートをしたほうがよいかもしれません。多分、なんかのサービスを落として立ち上げればいいのだと思うのですが、分からないので一応リブートします。

NTのsuコマンドの特徴は、なんといってもデフォルトはGUIということです。正直言ってこんなもの出てもらっても困ります。詳しくは、SU.TXTを見れば良いのですが、下記によく使うものを説明します。

su Administrator "" -cb

いわゆるUNIXでいう普通のsuの使い方です。そのコンソールウインドウと、そこから派生したプログラムが基本的にAdministrator権限になります。一部のアプリは「そんなことがNTでできるとは思ってもみなかった!」と、自慢げに落ちやがるので注意必要です。Explorerを起動しようとすると、「そのユーザのSHELL兼ウインドウマネージャとして起動しようとしたが、すでにルートExplorerがいるのでやっぱり止めた!」と意味がありません。このあたりExplorerの固有の問題ですので、IE4でシェル統合した後にIE5か5.5か6などを入れると挙動が変わるかもしれません。Win2kでも挙動は変わるかもしれませんが、Win2kではそもそもショートカットでひとつのウインドウだけ別権限で動かせるのでsuは必要ありません

従って、Explorerを起動せずにsuによって成り代わった権限でファイルを操作するには、WINFILE.EXE(ファイルマネージャ)を使うと良いです。

ユーザ名が\\DomainName\Administratorとかなら、

su Administrator "" DomainName -cb

とすれば良い。-cbを無くすと別のコンソールを開きます。

NTのsuならではの変なワザは、、

su Administrator "progman.exe"  DomainName Winsta\UniqName

UniqNameを切替えることで複数のディスプレイ状況を所持することができます。この処理をおこなうと実際には画面が切り替わってプログラムマネージャを開きます。ここでcmd.exeとかtcsh.exeとかを実行するとタスクバーもなにもないデスクトップに、コンソールの中でcmd.exeとかが動きだす。当然、裏のアプリケーションは動いていて、最初に開いたこのウインドウを閉じると元のデスクトップに戻ってきます。面白いのは親ウインドウからアプリケーションを起動して親ウインドウだけ閉じると、子供は残ったままになることです。そして下手をするとデスクトップが戻ってしまい、子供だけAdministrator権限のタスクマネージャで落とさない限り残りつづけるという嫌なことが起きます。

×駄目な例 su Administrator "explorer.exe"  DomainName Winsta\UniqName

こうすると幸せになれそうな気がするが、残念ながらうまくはいきません。一旦、別のウインドウでprogmanのかわりにtcsh.exeとかを起動しルートウインドウがないデスクトップにしてから、そこでexplorer.exeを実行すると確かにExplorerだけは起動します。スタートメニューも現れます。ieを起動することもできます。完璧!と思うのですが、このルートウインドウのexplorerを殺す方法がkill.exeとかtaskman.exeしかないのです。あくまでもスタートメニューのログアウトは、ログアウトコマンドを発行することであって、このプロセスを殺すものではないからです。ここでログアウトすると、何も無かったようにログアウトされ、いままでログインしていた自分のアカウントのデスクトップは、どこかで動きつづけ切り替わることなく落とすまで走り続けることになります。

 

※なお、Win2kならばショートカットを作ることで、ある一つのウインドウ(とその派生)だけAdministratorということが出来ますよね。

PageTop Index


使用中のロックされているシステムのDLLを入れ換える。

システムディレクトリ\WINNT\system32の下のDLLは、ほとんどが使用中で書換できません。

しかしロックされたファイルを削除したかったり、入れ換えたかったりすることがあります。

delでもrmでも削除できませんがこういうときにはリネームすると、そのdllは再起動の時からいなくなります。入れ換えたければ、リネームして入れ換えたいものを同名でコピーしてくればよいのです。当然再起動すれば、次からはそちらが使われます。

PageTop Index


バッチファイルに渡された8+3ファイル名を、バッチファイルの中で元に戻す

実はNTはバッチファイルにExplorerを通してファイルをドラッグアンドドロップで渡すと(Send Toを利用しても同様)、ファイルがショートファイル名扱いになります。これをバッチファイルの中でロングファイル名に戻したいときにはバッチファイルのなかで次のような処理を行います。

仮定

実行方法その1(全部NT内部のツールで行う)

for /f "tokens=1" %a in ('dir /B target~1.htm') do foo.exe %a

実行方法その2(UNIX系移植ツールを使う)

dir /B target~1.htm | xargs -n1 foo.exe

つまり、

dir /B 8+3ファイル名

と行うと、出力はロングファイルで出力されるのを利用しています。あとは日付のディレクトリを作る項で記述したわざと同じです。ただし、この方法はディレクトリを受け渡すときには使用できません。

バッチファイルは16bitのものというルールがあるのでしょうか?

使用例

mulewin.exeのショートカット"Mule"を、ProfileのしたのSendToにおき、エクスプローラから送るメニューでMuleを立ち上げると、読まれたファイルは8+3ファイル名になっています。当然セーブするときにファイル名を元に戻す作業をおこなわなくてはなりません。これを回避するためにmulewin.exeを起動するバッチファイルを次のように作ります。

for /f "takens=1" %a in ('dir /B %1') do mulewin.exe %a

※多分動くと思うので、動作確認はしてないっす。動かなかったらごめん。

ただしこの方法だと複数のファイルを選択してドラッグアンドドロップでデスクトップのショートカットMuleに送りたいときはうまくいきません。

PageTop Index


コマンドプロンプトでファイル名補完がしたい

tcsh.exeやcygnusのbash.exeを使うと、当然UNIXのSHELLなのでファイル名補完が出来ます。

しかし、cmd.exeで出来ないわけではありません。ファイル名を補完をしたいときはレジストリの次を書き換えます。

\\HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar

これにデフォルトでは0が入っています。

TABでファイル名補完をする場合は、9<TABのキャラクタコード>を代入すると、TABで補完が出来るようになります。

PageTop Index


仮想ファイルの場所を移動する(ルートディレクトリ以外にする)

下記のレジストリが仮想ファイルのファイル名です。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Win2kとWinXPで、telnetd(telnet server)を起動する

Win2kとWinXPは標準でtelnetdが装備されている。

セキュリティホールになりがちなので、telnetdはInternetにさらされているコンピュータでは起動しない方がよい。Intenet経由でログインしたい場合は、sshdなどを探してみたり、ネットワーク的な工夫をしないとならないだろう。

telnetdを有効にする方法は、管理ツールのサービスからTelnetを起動させればよい。自動起動にさせれば次回からは自動的に行う。

しかし、このままではWindows添付のtelnetからしかログインできない。理由は認証に、NTLMというNTローカル?な方法が使われているためである。

これを普通のtelnetdのように、ログインネームとパスワードでも有効にするには、レジストリエディタで編集する必要がある。

HKEY_LOCAL_MACHINE\Software\Microsoft\TelnetServer\1.0

Windows 2000の場合はNTLMを1にし、XPの場合はSecurityMechanismを1にする。デフォルトは2。

これ以外、このレジストリにはDefaultShellなどは設定して幸せになることが出来る場合がある。

これらの設定は、tlntadmnというコマンドで、設定の変更ができたり参照が出来たりする。

Microsoftのページも参照のこと

なおNTでどうしてもtelnetdを使いたい場合は、pragmasysのtelnetdがよいだろう(但し有料)。