Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows NT/2000/2003 (http://forum.oszone.net/forumdisplay.php?f=5)
-   -   [решено] просмотр активных пользователей в АД (http://forum.oszone.net/showthread.php?t=241729)

Dosmod 31-08-2012 13:35 1980493

просмотр активных пользователей в АД
 
подскажите каким образом можно посмотреть какие в данный момент активны пользователи в домене? т.е. какие юзеры сейчас подключены к домену и работаю в нем
это вобще стандартными средствами вин2003 возможно глянуть?

Petya V4sechkin 31-08-2012 14:15 1980522


Dosmod 31-08-2012 14:30 1980534

попробовал второй способ:
при запуске батника ссылкается на неизвестную команду psloggedon

Petya V4sechkin 31-08-2012 14:54 1980558

Там же ссылка на нее.

Dosmod 31-08-2012 15:15 1980579

я просто думал что это можно организовать стандартными средствами ОС, а тут утилита нужна...
и да, выкачать ее по ссылке немогу, и нагуглить рабочую ссылку тоже не выходит
может она гдето на сайте МС есть?

АП.
нашел утилиту в нете, при запуске батника выдает версию утилиты и на этом все.. что опять не так?

Petya V4sechkin 31-08-2012 15:36 1980597

Цитата:

Цитата Dosmod
при запуске батника выдает версию утилиты

Прям так и выдает?

Цитата:

Цитата Dosmod
что опять не так?

Неизвестно, что и откуда вы скачали и какой батник запускаете.
Загрузить набор программ PsTools

Dosmod 31-08-2012 15:47 1980609

я это и загрузил, скопировал туда в каталог батник к программе, запустил его
выскочило окно о лицензировании, согласился с лицензией
далее в консоле просто выдает версию утилиты:

Код:

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

и так пару десятков меседжей, после этого окно закрывается

Petya V4sechkin 31-08-2012 15:58 1980622

Для тестирования уберите из батника первую команду @echo off и выложите результат.

Dosmod 31-08-2012 16:09 1980636

вот такое:
Код:

Microsoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.

C:\Documents and Settings\Администратор.NTB.000>"C:\dba\Текстовый документ.bat"

C:\Documents and Settings\Администратор.NTB.000>setlocal ENABLEDELAYEDEXPANSION


C:\Documents and Settings\Администратор.NTB.000>set dom=NTB

C:\Documents and Settings\Администратор.NTB.000>for /F "Tokens=1" %c in ('net vi
ew /domain:NTB|findstr /L /C:"\\"') do (for /F "tokens=*" %u in ('psloggedon -L
%c|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\4KORPUSCOMP2|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\ALEXCHAY|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\BIBL-1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\BIBL-3|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\C_BENUH|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DANIEL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DASKAL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DATABASE_SERVER|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\KORPUS44|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\LIB|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MAIN_SERVER|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MANDARYNKA|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\METODIST1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MICROSOF-4EE9FC|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MICROSOF-E8FF9F|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MIZHNAROD1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\NTB-7K|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\NTB-DOSMOD|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\REJESTRATSIJA|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\TARASENKO_KOMPL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\VUDACHA3ETAZH|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\ZINCHENKO|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Documents and Settings\Администратор.NTB.000>endlocal

C:\Documents and Settings\Администратор.NTB.000>

правда вот вродебы показало активных
TARASENKO_KOMPL
DOSMOD

Petya V4sechkin 31-08-2012 16:13 1980638

Цитата:

Цитата Dosmod
"psloggedon" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом

Вы забыли скопировать psloggedon.exe в папку с батником.

Dosmod 31-08-2012 16:16 1980643

не забыл:

Petya V4sechkin 31-08-2012 16:20 1980645

Dosmod, текущая папка не C:\dba.
Положите psloggedon.exe в \Windows\system32.

Dosmod 31-08-2012 16:23 1980648

скопировал туда и програму и батник - не помогло

Petya V4sechkin 31-08-2012 16:24 1980649

Результат выложите.

Dosmod 31-08-2012 16:32 1980654

вот такое, переименовал еще батник на всякий случай, а то может оно с кирилицей не дружит

Код:

Microsoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.

C:\Documents and Settings\Администратор.NTB.000>C:\WINDOWS\system32\1.bat

C:\Documents and Settings\Администратор.NTB.000>setlocal ENABLEDELAYEDEXPANSION


C:\Documents and Settings\Администратор.NTB.000>set dom=NTB

C:\Documents and Settings\Администратор.NTB.000>for /F "Tokens=1" %c in ('net vi
ew /domain:NTB|findstr /L /C:"\\"') do (for /F "tokens=*" %u in ('psloggedon -L
%c|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\4KORPUSCOMP2|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\BIBL-1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\BIBL-3|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\C_BENUH|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DANIEL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DASKAL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\DATABASE_SERVER|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\KORPUS44|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\LIB|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MAIN_SERVER|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\METODIST1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MICROSOF-4EE9FC|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MICROSOF-E8FF9F|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\MIZHNAROD1|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\NTB-7K|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\NTB-DOSMOD|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\REJESTRATSIJA|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\TARASENKO_KOMPL|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\VUDACHA3ETAZH|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>(for /F "tokens=*" %u in ('pslog
gedon -L \\ZINCHENKO|findstr /L /C:"/"') do (
set work1=%u
 call set work2=!!work1:NTB=!!
 if "!work2!" NEQ "!work1!"
) )

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


C:\Documents and Settings\Администратор.NTB.000>endlocal

C:\Documents and Settings\Администратор.NTB.000>


Petya V4sechkin 31-08-2012 17:11 1980673

Dosmod, оказалось, что батник зависит от разделителя даты.
Если разделитель - точка, попробуйте так:
Код:

@echo off
setlocal ENABLEDELAYEDEXPANSION
set dom=%USERDOMAIN%
for /f "Tokens=1" %%c in ('net view /domain:%dom%^|findstr /L /C:"\\"') do (
 for /f "tokens=*" %%u in ('psloggedon -L %%c 2^>nul^|findstr /L /C:"."') do (
  set work1=%%u
  call set work2=!!work1:%dom%=!!
  if "!work2!" NEQ "!work1!" echo %%c %%u
 )
)


Dosmod 31-08-2012 20:32 1980798

спасибо, так как сервер на работе то попробовать смогу только после выходных
отпишусь о результате

Dosmod 04-09-2012 17:47 1982935

работает, спс!
правда очень долго сканит компьютеры... а у меня их с сотню, и вместо кирилицы выдает знаки вопросов (у меня некоторые логины на кирилице)

и как сделать чтобы после скана окно не закрывалось? команда "стоп" не катит

Iska 04-09-2012 18:26 1982954

Цитата:

Цитата Dosmod
и как сделать чтобы после скана окно не закрывалось? команда "стоп" не катит »

Запускать из-под командной строки, либо добавить в конец пакетного файла «pause».

Dosmod 04-09-2012 19:22 1982995

с командной строки просто зависает и все, не хочет сканить
а за "паузу" спс, завтра попробую

DmitriiV 05-09-2012 09:55 1983342

Цитата:

Цитата Dosmod
... а тут утилита нужна...

Можно и без утилиты - сценарием.
Цитата:

Цитата Dosmod
... долго сканит компьютеры...

Да, это самый медленный способ, но зато наиболее достоверный.
Когда-то писал себе такой сценарий:
Код:

Dim objWsNet, strDomain, strThisComputer, strTranslator, blnIsConsole
Dim objWShell, objExec, objOutStream
Dim strUser, strTemp, strTemp2, xAnswer
Dim objDict, strKey
Dim objFS, objFile, strList, strLog

strLog = "LoggedUsers_List.log"
Set objFS = CreateObject("Scripting.FileSystemObject")
strTranslator = objFS.GetBaseName(WScript.FullName)
If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then
    blnIsConsole = True
Else
    blnIsConsole = False
End If
Set objWShell = CreateObject("WScript.Shell")
If Not blnIsConsole Then
    xAnswer = MsgBox("Сценарий ориентирован на консольный режим." & vbNewLine & "Перезапустить его с помощью консоли?", vbYesNo + vbQuestion, "Выбор режима работы")
    If xAnswer = vbNo Then
        WScript.Echo "Выполнение сценария прекращено."
    Else
        objWShell.Run "cscript.exe " & WScript.ScriptFullName, 1
    End If
Else
    Set objWsNet = CreateObject("WScript.Network")
    strDomain = objWsNet.UserDomain
    strThisComputer = objWsNet.ComputerName
    Set objWsNet = Nothing
    Set objDict = CreateObject("Scripting.Dictionary")
    objDict.CompareMode = 1
    Call Comuters_List(objDict)
    strUser = vbNullString
    For Each strKey In objDict.Keys
        If StrComp(strThisComputer, strKey, vbTextCompare) <> 0 Then
            Set objExec = objWShell.Exec("ping -n 1 -w 130 " & strKey)
            Set objOutStream = objExec.StdOut
            strTemp = vbNullString
            While Not objOutStream.AtEndOfStream
                strTemp = strTemp & Trim(objOutStream.ReadLine())
            Wend
                If InStr(1, strTemp, "TTL", vbTextCompare) > 0 Then
                    strUser = Logged_Session(strKey, objDict.Item(strKey))
                    If Len(strKey) < 8 Then
                        strTemp = vbTab & vbTab
                        strTemp2 = vbTab & vbTab
                    Else
                        strTemp = vbTab
                        strTemp2 = vbTab & vbTab
                    End If
                    If Len(strUser) > 0 Then
                        If StrComp(strUser, "Error.", vbTextCompare) <> 0 Then
                            strList = strList & strKey & strTemp & " = " & strUser & vbNewLine
                            WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = " & strUser
                        Else
                            strList = strList & strKey & strTemp & " = Ошибка при определении сеанса" & vbNewLine
                            WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = Ошибка при определении сеанса"
                        End If
                    Else
                        WScript.StdOut.WriteLine "[ + ] " & strKey & strTemp2 & " = Сеанс не обнаружен"
                    End If
                Else
                    WScript.StdOut.WriteLine "[ - ] " & strKey
                End If
        End If
    Next
    Set objOutStream = Nothing
    Set objExec = Nothing
        If objDict.Count > 0 Then
            strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog)
            Set objFile = objFS.CreateTextFile(strLog, True)
            objFile.Write strList
            objFile.Close
            Set objFile = Nothing
            objWShell.Run "notepad.exe " & strLog, 1
            objDict.RemoveAll
        Else
            WScript.Echo "Ничего не найдено."
        End If
        Set objDict = Nothing
End If
Set objWShell = Nothing
Set objFS = Nothing
WScript.Quit 0


'=====

Function Comuters_List(objDictionary)
Dim objRootDSE, strDomain, strTemp, blnTemp
Dim objConnection, objCommand, objRSet
Const ADS_SCOPE_SUBTREE = 2
Const ADS_UF_ACCOUNTDISABLE = 2

Set objRoot = GetObject("LDAP://RootDSE")
strDomain = objRoot.Get("DefaultNamingContext")
Set objRoot = Nothing
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
strCommandText = "SELECT cn,userAccountControl,operatingSystem FROM 'LDAP://" & strDomain & "' WHERE objectCategory='Computer'"
objCommand.CommandText = strCommandText
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRSet = objCommand.Execute
objRSet.MoveFirst
Do
    If Not (objRSet.Fields("userAccountControl").Value And ADS_UF_ACCOUNTDISABLE) Then
        strTemp = objRSet.Fields("operatingSystem").Value
        If Not IsNull(strTemp) Then
            If InStr(1, strTemp, "server", vbTextCompare) = 0 Then
                If InStr(1, strTemp, "2000", vbTextCompare) > 0 Then
                    blnTemp = False
                Else
                    blnTemp = True
                End If
                strTemp = objRSet.Fields("cn").Value
                If Not objDictionary.Exists(strTemp) Then
                    objDictionary.Add strTemp, blnTemp
                End If
            End If
        End If
    End If
    objRSet.MoveNext
Loop While Not objRSet.EOF
Set objRSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
Call Sorting_Dictionary(objDictionary)
End Function

'=====

Function Logged_Session(strComputer, blnFlag)
Dim objWMI, objCollection, objItem, strName, strTemp
Dim strParamName
Const HKLM = &H80000002
Const strSubKeyName = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

strParamName = "DefaultUserName"
strName = vbNullString
On Error Resume Next
If blnFlag Then
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    If Err.Number = 0 Then
        Set objCollection = objWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem")
        If Err.Number = 0 Then
            For Each objItem In objCollection
                strName = objItem.UserName
                If Err.Number <> 0 Then
                    Err.Clear
                    strName = "Error."
                End If
            Next
        Else
            Err.Clear
            strName = "Error."
        End If
        Set objItem = Nothing
        Set objCollection = Nothing
    Else
        Err.Clear
        strName = "Error."
    End If
Else
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
    If Err.Number = 0 Then
        objWMI.GetStringValue HKLM, strSubKeyName, strParamName, strName
        If Err.Number = 0 Then
            If Len(strName) = 0 Then
                strName = "идентифицировать сеанс не удалось"
            Else
                strName = strName & " (актуальность данных не гарантирована)"
                strParamName = "DefaultDomainName"
                objWMI.GetStringValue HKLM, strSubKeyName, strParamName, strTemp
                If Err.Number = 0 Then
                    If Len(strTemp) > 0 Then
                        strName = strTemp & "\" & strName
                    End If
                Else
                    Err.Clear
                End If
            End If
        Else
            Err.Clear
            strName = "Error."
        End If
    Else
        Err.Clear
        strName = "Error."
    End If
End If
Set objWMI = Nothing
On Error GoTo 0
Logged_Session = strName
End Function

Проверен для версий 2000 - 7 (не опрашивает компьютеры с ОС серверного типа).
Из-за особенностей "двухтысячной" версии достоверность того, что в настоящий момент сеанс открыт не гарантирована: нужны дополнительные проверки, но они отнимают довольно много времени.

Dosmod 05-09-2012 10:27 1983365

оу спс, щас попробую этот скрипт, это же вбс?

и да, при методе с прогой и батником время начала сеанса юзера отписывает не то которые было в момент входа на сервере а то которое выставлено у юзера на ПК... а там у нас на некоторых системах батарейки накрылись, так время сбивается
да и то что батник кирилицу не знает тоже не очень класно

АП. а каким образом запустить скрипт? при его старте говорит что он ориентирован для консольного режима, предлагает перезапустить в консоле - перезапускаю, за 0,3 секунды промигивает консольное окно и на этом все

DmitriiV 05-09-2012 11:27 1983401

Можете сразу запускать из консоли (через CSCRIPT.EXE).
Цитата:

Цитата Dosmod
...перезапускаю, за 0,3 секунды промигивает консольное окно и на этом все

Симптомы похожи на ситуацию, когда запуск выполняется на сервере, а сценарий лежит на сетевом томе. Если так, то просто переместите сценарий на локальный том.

Dosmod 05-09-2012 12:44 1983440

Цитата:

Цитата DmitriiV
через CSCRIPT.EXE »

на локальном пк пробую запустить - окно на 0,3 сек
на сервере пробую запустить эту программу - тоже всего на 0,3 сек окно

сценарий также пробовал на ПК клиента запускать и на сервере

DmitriiV 05-09-2012 13:24 1983465

Dosmod, для локализации ошибки добавляйте в код отладочные операторы.
Для начала, например, замените оператор
Код:

Call Comuters_List(objDict)
на фрагмент
Код:

MsgBox "До вызова Comuters_List()"
Call Comuters_List(objDict)
MsgBox "После вызова Comuters_List()" & vbNewLine & "Кол-во станций: " & objDict.Count
WScript.Quit 0

Ну, и далее в том же духе.

Dosmod 05-09-2012 13:48 1983475

заменил, ситуации не изменилась... всеравно быстро мигает окно

DmitriiV 06-09-2012 06:47 1983933

Цитата:

Цитата Dosmod
на локальном пк пробую запустить - окно на 0,3 сек...

То есть запускаете консоль, в её окне отдаёте команду вида cscript myscript.vbs, где myscript - имя запускаемого сценария, и окно консоли закрывается?

Dosmod 06-09-2012 15:41 1984215

ну CSCRIPT.EXE запускается всего на 0.3 секунды... но я другим методом через командную строку запускаю, с вашей командой
и получаю вот это:

Код:

C:\Documents and Settings\Администратор.NTB.000>cscript "E:\Дошка оголошень\1.vb
s"
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

E:\Дошка оголошень\1.vbs(131, 1) Microsoft VBScript runtime error: Type mismatch
: 'Sorting_Dictionary'

запускаю тот скрипт который ранее поправили для отладки

DmitriiV 06-09-2012 16:33 1984235

Теперь понятно.
Либо удалите вызов функции Sorting_Dictionary() из кода функции Comuters_List(), либо добавьте к сценарию её код, приведённый ниже:
Код:

Function Sorting_Dictionary(objDictSorting)
Dim blnStopSort, intNumChange, arrKeys, arrItems, strTemp

arrKeys = objDictSorting.Keys
arrItems = objDictSorting.Items
blnStopSort = False
i = 0
Do
    intNumChange = 0
    For j = 0 To UBound(arrKeys) - 1
        If arrKeys(j) > arrKeys(j + 1) Then
            strTemp = arrKeys(j)
            arrKeys(j) = arrKeys(j + 1)
            arrKeys(j + 1) = strTemp
            intNumChange = intNumChange + 1
        End If
    Next
    If intNumChange = 0 Then
        blnStopSort = True
    Else
        If i < UBound(arrKeys) Then
            i = i + 1
        Else
            blnStopSort = True
        End If
    End If
Loop While Not blnStopSort
For i = 0 To UBound(arrKeys)
        arrItems(i) = objDictSorting.Item(arrKeys(i))
Next
objDictSorting.RemoveAll
For i = 0 To UBound(arrKeys)
        objDictSorting.Add arrKeys(i), arrItems(i)
Next
Erase arrKeys
Erase arrItems
End Function


Dosmod 06-09-2012 16:44 1984243

добавил функцию - заработало, спс!
правда почемуто админов в сети не показывает... минус рисует на том ПК где щас под своим логином админ работает, и чегото иногда выдает "ошибка при определении сеанса"
ну и да, сканит еще дольше чем через батник с прогой :D
и нету времени начала сеанса...
и почемуто тех юзеров у которых кирилица в названии учетки пропускает

DmitriiV 07-09-2012 10:06 1984606

Цитата:

Цитата Dosmod
... админов в сети не показывает...

У нас показывает.
Какая версия ОС на этих узлах?

Цитата:

Цитата Dosmod
... минус рисует на том ПК где щас под своим логином админ работает...

Не проходит "пинг". Наиболее вероятные причины:
- ICMP закрыт брандмауэром или "антихакером";
- 130 миллисекунд, используемых в сценарии, маловато для ожидания отклика от опрашиваемого узла.

Цитата:

Цитата Dosmod
... выдает "ошибка при определении сеанса"...

Нужна детализация. Для этого надо "развивать" сценарий, т.к. в теперешнем виде подробный анализ ошибок не реализован.

Цитата:

Цитата Dosmod
... нету времени начала сеанса...

Опять-таки для этого надо "развивать" сценарий (мне, например, такая информация неинтересна).

Цитата:

Цитата Dosmod
... тех юзеров у которых кирилица в названии учетки пропускает

У нас 90% "логинов" на кириллице :)
Вообще говоря, работа сценария никак не связана с языком "логина". Нужна отладка под ваши условия.

Dosmod 07-09-2012 14:56 1984782

Цитата:

Цитата DmitriiV
Какая версия ОС на этих узлах? »

на всех машинах винХР с сп1-3

Цитата:

Цитата DmitriiV
- ICMP закрыт брандмауэром или "антихакером"; »

скорей всего, у админов фаервол

Цитата:

Цитата DmitriiV
Вообще говоря, работа сценария никак не связана с языком "логина". Нужна отладка под ваши условия. »

ну с этим я попоже разберусь, у нас тут с кирилицей в основном только админские учетки


Время: 12:38.

Время: 12:38.
© OSzone.net 2001-