[前の記事]« CSVファイルの連結で半角スペース(?)が混入する
[次の記事]ファイルサイズが0かどうかの取得 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR /F」索引へ
▲カテゴリー「ネットワーク(LAN)関連コマンド」索引へ

[NT4]ネットワーク接続しているユーザの確認

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
 
 


カテゴリー「FOR /F」索引へ
カテゴリー「ネットワーク(LAN)関連コマンド」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年09月18日 13:55に投稿されたエントリーのページです。

ひとつ前の投稿は「CSVファイルの連結で半角スペース(?)が混入する」です。

次の投稿は「ファイルサイズが0かどうかの取得」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート