625) ネットワーク接続しているユーザの確認 daisi 2003/09/18(木) 11:59 |
|
|
|
たびたびお世話になります。 ある時間に、サーバにネットワーク接続しているユーザーがいたら、 管理用クライアント上にnet sendでメッセージを表示させる、 というバッチを組もうとしているのですが、うまくできません。 OSはNT4.0です。よろしくお願いします。 |
|
631) Re:ネットワーク接続しているユーザの確認 じゃく 2003/09/18(木) 18:42 |
|
|
|
こんばんは >ある時間に、サーバにネットワーク接続しているユーザーがいたら、 >管理用クライアント上にnet sendでメッセージを表示させる、 >というバッチを組もうとしているのですが、うまくできません。 >OSはNT4.0です。よろしくお願いします。 うまくできませんというのは、どういうことでしょう? 1)サーバにネットワーク接続しているユーザーを知る方法が解らない 2)バッチを組んでみたがうまく動かない? どちらのことかな? 1)なら、net file か net session コマンドがあります 2)なら、バッチを掲載してみてください。 |
|
632) Re2:ネットワーク接続しているユーザの確認 daisi 2003/09/19(金) 11:47 |
|
|
|
ちょっと言葉足らずで申し訳ありませんでした。 「できない」というのは、具体的には、サーバ上の ファイルを開いているユーザーが存在しているかどうかを、 バッチファイルをくんで定期的に確認しようとしているのですが、 それがうまくいかない、というか、いい方法が思いつかない、 ということです。 一応、下記のバッチを試してみました。 for /f %%z in ('net session ^| find /C "aaa"') do if %%z NEQ 0 net send xxx ユーザがいますよ ここで、aaaに当たる箇所にnet sessionで表示されるところの、ユーザー名を入れてあげればうまくいくはずなのですが、サーバに接続してくるユーザは複数でユーザごとにユーザ名は異なるので、このバッチではうまくいきません。 なにかよい知恵はありませんでしょうか。 よろしくお願いします。 |
|
633) Re3:ネットワーク接続しているユーザの確認 ふぇむ 2003/09/19(金) 15:24 |
|
|
|
net session コマンドを試してみました。誰も接続していない場合は 一覧にエントリが存在しません。 とだけ表示するようですね。また、接続しているユーザがいると、 コンピュータ ユーザー名 クライアント オープン アイドル時間 ------------------------------------------------------------------------------- \\xxx.xxx.xxx.xxx USER1 Windows 2000 2195 1 00:42:10 \\xxx.xxx.xxx.xxx USER2 Windows 2000 2195 0 00:03:34 \\xxx.xxx.xxx.xxx USER2 Windows 2000 2195 1 00:35:12 \\xxx.xxx.xxx.xxx USER3 Windows 2000 2195 1 00:45:20 コマンドは正常に終了しました。 とか表示されるようですね。 これらを利用して、もし「誰もいないかどうか」を検知するならば、net session の出力結果が「一覧にエントリが存在しません。」なのかどうかをチェックすることでできそうです。 また、接続しているユーザをリストアップするには、 for 文を使って、net session の結果を最初3行をSKIPし2番目のフィールドだけ列挙すれば、できそうです。ただし重複がある可能性があるので、UNIX で | sort | uniq とやるのと同様の処理の実装が必要ですね。 |
|
635) Re4:ネットワーク接続しているユーザの確認 ふぇむ 2003/09/19(金) 18:30 |
|
|
|
>また、接続しているユーザをリストアップするには、 for 文を使って、net session の結果を最初3行をSKIPし2番目のフィールドだけ列挙すれば、できそうです。 最初4行ですね、すみません。 > ただし重複がある可能性があるので、UNIX で | sort | uniq とやるのと同様の処理の実装が必要ですね。 たとえばこんな感じでしょうか。 @echo off setlocal rem ## rem ## ファイル名等初期化 rem ## set WORKDIR=%TEMP%\ set NET_SESSION_LOG=%WORKDIR%net_session.log set LIST=%WORKDIR%list.txt set LIST_TMP=%WORKDIR%list_tmp.txt set UNIQ_LIST=%WORKDIR%uniq_list.txt rem ## rem ## net session ログの取得 rem ## net session > "%NET_SESSION_LOG%" rem ## rem ## net session ログからユーザを抽出 rem ## if EXIST "%LIST%" del "%LIST%" for /F "usebackq SKIP=4 tokens=2" %%z in ( "%NET_SESSION_LOG%" ) do ( @echo %%z>> "%LIST%" ) rem ## rem ## 抽出したユーザをソート&ユニーク処理 rem ## sort "%LIST%" > "%LIST_TMP%" set PRE= if EXIST "%UNIQ_LIST%" del "%UNIQ_LIST%" for /F "usebackq" %%z in ( "%LIST_TMP%" ) do ( call :UNIQ "%%z" ) rem ## rem ## ユーザ一覧の表示 rem ## type "%UNIQ_LIST%" goto :end rem ## rem ## ソートされたリストのユニーク化処理補助 rem ## :UNIQ if NOT "%PRE%" == "%~1" echo %~1>> "%UNIQ_LIST%" set PRE=%~1 goto :eof :end endlocal |
|
638) Re5:ネットワーク接続しているユーザの確認 daisi 2003/09/26(金) 16:13 |
|
|
|
ふぇむさん、ありがとうございました。 お礼が遅れて申し訳ありません。 他の業務が入ってしまって、まだテストは実施 していないのですが、確認後にまた発言する かもしれません。申し訳ありませんが、 そのときはまたよろしくお願いします。 |
|
648) Re5:ネットワーク接続しているユーザの確認 daisi 2003/10/01(水) 17:02 |
|
|
|
こんにちは。ふぇむさんに教えていただいたコードを思いっきり 簡略化して^^;下記のとおりバッチを組んだところ、うまく行きました。ちなみに、今回私が目的としたところのバッチは、「サーバ上の 共有フォルダを参照しているユーザがいなければ、サーバ を再起動する、というものです。 @echo off if EXIST c:\list.txt del c:\list.txt for /F "SKIP=4 tokens=2" %%z in ( 'net session' ) do if not "%%z"=="Windows" @echo %%z >> c:\list.txt IF not EXIST c:\list.txt shutdown /L /R /Y /C |