どこからどのくらいつなげられているのかを確認する方法

Windowsのクライアント系OSは外部から接続される場合、その数に上限が設定されています。最大10セッション(XP HomeEditionは5という噂あり)までです。
個人で使用している場合にはこの上限値を超える事はありませんし、仕事で使用している場合にはファイルサーバやプリンタサーバにはサーバ系OSが導入されているのでそれほど大きな問題には発展しません。


ただ、たまにクライアント系OSをファイル/プリンタサーバにしている場合があり、その場合にはこのセッション制限値の上限を超えてしまうことがあります。
(↓こんなエラーが出ます)

コンピュータへの接続数が最大値に達しているため、これ以上このリモート コンピュータに接続できません。


ちなみにこのセッションは一定時間経つと消えてしまうので、ちょっと待てば繋がるようになったりしますが、結局接続しようとしている端末の母数が減らない限り、たまに繋がらないという状況は解消されません。
誰が一番繋いでるんだという事を確認したいと思っても、接続状況は常時変動しているので確認するのも大変。


そんなわけで、かなり前置きが長くなりましたが、今誰が接続しているのかというのを一定時間ごとにファイルに記録するバッチファイルを作成しました。XP SP2と2000 SP4で動作確認済みです。

@ECHO OFF

ECHO 調査の事前準備をしています
ECHO しばらくお待ちください
TITLE 【セッション情報調査中】

:// 日付を整備
SET FDATE=%date:~2,10%
SET FTIME=%time:~0,-6%

:// ログファイル名を設定
SET LOGFILE="%~dp0Log\SessionLog%FDATE:/=-%_%FTIME::=.%.dat"

:// 開始時刻取得
SET STARTTIME=開始時刻:%date% %time:~0,-3%

:// 処理間隔設定
SET WAITTIME=5

:// WindowsXP SP2かどうかフラグ[0:XP SP2 , 1:XP SP2以外]
SET OSVER=1

:// WindowsXP SP2かどうかの確認
NETSH FIREWALL SHOW > NUL 2> NUL
IF "%ERRORLEVEL%" == "1" (
  SET OSVER=0
)

if not exist %~dp0\LOG (
  MD "%~dp0\LOG"
)


ECHO "【セッション確認】" > %LOGFILE%
:LOOP_TAG
echo ----------------------------------------- >> %LOGFILE%

:// 時刻表示
ECHO %time:~0,-3% >> %LOGFILE%

:// セッション情報表示
echo ※セッション情報 >> %LOGFILE%
net session | find /V "一覧にエントリが存在しません。" >> %LOGFILE%

:// オープンされている共有ファイル表示
echo ※共有ファイル情報 >> %LOGFILE%
net file | find /V "一覧にエントリが存在しません。" >> %LOGFILE%

:// 使用中のアプリケーション+ポート表示
IF "%OSVER%" == "1" (
  echo ※使用アプリケーション情報 >> %LOGFILE%
  netstat -b                    >> %LOGFILE%
) ELSE (
  echo ※使用ポート情報  >> %LOGFILE%
  netstat -n             >> %LOGFILE%
)

echo. >> %LOGFILE%

:// 時間稼ぎ
ping -n %WAITTIME% 127.0.0.1 -f -l 1024 > NUL

CLS
ECHO 【セッション情報調査中です[触らないで下さい]】
ECHO    %STARTTIME%
ECHO    現在時刻:%date% %TIME:~0,-3%
ECHO.
DIR /c %LOGFILE% | find ".dat"
ECHO.
ECHO 途中で止める場合はctrl+cを押して下さい

GOTO LOOP_TAG

今回のバッチファイルのポイントは大きく3点です。

    1. 変数の中のデータを文字列置換したり、部分切り出しをしている
    2. netstatコマンドの-bオプション(XP SP2限定コマンド)が便利
    3. net sessionコマンドの使い方