Windows : してログ

定期的にバックアップファイル等を作成したい場合、環境変数の%date%を使いたいところですが、返ってくる値に「/」が含まれるためこのままでは使用できません。そこで、次のように数字部分のみを抜き出します。

echo %date:~-10,4%%date:~-5,2%%date:~-2,2%

時刻も使いたい場合は、先頭に空白文字が付く場合があるので、次のように空白文字をゼロに置き換えた変数を使って同様に抜き出します。

set time2=%time: =0%
echo %time2:~0,2%%time2:~3,2%%time2:~6,2%

WindowsタスクスケジューラなどでPHPで作ったコマンドを実行した場合、DOS窓が表示されて邪魔になることがあります。そんな時は、php.exe で実行する代わりに、php-win.exe で実行しましょう。php-win.exe はコンソール出力を行わないためバックグラウンドで実行するのに適しています。

環境に php-win.exe がインストールされていない場合は、下記のように、「Script Executable」を追加インストールしてください。

Windows サーバーにリモートデスクトップ接続で作業しているときに、ネットワーク障害などで異常切断されてしまうと、今まで作業していたデスクトップに再接続できなくなることがあります。これは、今までの接続がゾンビになって裏で動いており、再接続で新しいデスクトップが生成されるためです。前のデスクトップでバッチ処理していたり、未保存のファイルがあるときに陥ると焦りますが、回復させる方法があります。

ゾンビ接続の回復方法
  1. 再接続して新しいデスクトップを開きます
  2. タスクマネージャーからユーザーのタブを開きます
  3. ゾンビになった接続と、再接続した接続のユーザーが表示されます
  4. ゾンビになった接続を選択し「切断」ボタンを押します
  5. 再接続したほうは、ログオフします
  6. もう一度、再接続すると、ゾンビになったほうに再接続されます
参考:タスクマネージャ

ゾンビを切断する際に誤って「ログオフ」を選んでしまうと、水の泡となりますので気をつけてください。また、どちらのユーザーか分かりにくいですが、上の方がゾンビと思って間違いないと思います。もし、違う方を切断してしまっても、自分の接続が切れるだけなので心配は要りません。

Windows Server 2003 でファイルサーバーを構築したはいいが、Vista や XP などから共有ファイルにアクセスすると異常にレスポンスが遅くなる問題に悩まされていた。普通に開く分には全く問題ないのだが、右クリックすると30秒近くレスポンスが返ってこない。何の罰ゲームだいったい。

で、今日見つけたのが、下記のサポート情報。
http://support.microsoft.com/kb/948496/ja

この KB948496 を適用したところ、サクっと右クリックメニューが表示されるようになった。同様の問題でお悩みの方は、ぜひお試しあれ。

※この記事は Y!ブログからの転載です
前から気になってはいたが、待てばなんとかなるから、放っておいた。

Windows 2003 Server で立てたファイルサーバーのファイルを右クリックしたり、フォルダを追加しようとすると、異常に待たされる。どの位かと言うと20〜30秒ぐらい応答しなくなる感じだ。二回目以降は大丈夫なのだが、しばらく放っておくとまた遅くなる。

MSにそれらしいパッチがあったので適用してみた。はて、効果はあるんかの?
http://support.microsoft.com/kb/947773/ja


※この記事は「Yahoo!ブログ - HDRp」からの転載です

起動すると特定のポートでサービスを開始するWindowsアプリケーションがあるのだが、これをある時間帯だけ稼働させたい、なんかいい方法は無いだろうか? という質問を受けたので、ちょっと方法を検討してみた。

定期的に作業させたい場合は、タスクスケジューラを使って開始時間と継続時間を設定すればいいのだが、そのアプリケーションは終了時に確認を求めるタイプなので、この方法ではうまく終了してくれない。

そこで思いついた方法は次の2つ

(1)起動しているアプリをリモートコントロールして終了させる

(2)利用ポートを遮断してアプリは起動しっぱなしとする

今回は、(1)の方法でうまく行きそうな目処が立ったので、こちらの方法を紹介します。

1.アプリケーションの起動はタスクスケジューラを普通に使って行う

2.終了については、下記のような WSH を作成してタスクスケジューラに登録する

 Set objShell = WScript.CreateObject("WScript.Shell")
 if objShell.AppActivate("Application Title") then
  WScript.Sleep 100
  objShell.SendKeys "%{F4}"
  WScript.Sleep 100
  objShell.SendKeys "{Y}"
 end if

 * AppActivate の引数は、終了したいアプリケーションのタイトルバーの内容を入れる
 * SendKeys は、アプリケーションに応じて変更(この場合は、Alt+F4 後、確認ダイアログに Y で応えている)

これでOKです。久しぶりに WSH なんて使いましたよ。


▽12/27追記
ログオンした状態で放っておく場合はこの方法でOKだが、そうでない場合はダメっぽい。隠しフラグの TASK_FLAG_INTERACTIVE でなんとかなるかと思ったがこれもダメ。今のところマシン自体を再起動させて道連れ終了させる他にいい手がなさそう。

▽12/27追記
SendKeysによるキーコード送信はログオフ中は無効になるようなので、この方法は使えないようです。別の方法でプロセスを終了させるようにしてみました。ただ、強制終了に近いと思いますので、アプリケーションによっては不具合が出てしまうかもしれません。

 for each Process in GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery ("select * from Win32_Process where Name='application.exe'")
  Process.terminate
 Next

※ application.exe のところは終了させたいアプリケーションに入れまえます

※この記事は「Yahoo!ブログ - HDRp」からの転載です