1vladal1
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день! Имеется батник, который запускается как среда для терминальных пользователей (часть батника): Код: cmdow @ /HID @echo of cd %ProgramFiles(x86)%\1cv82\common\ C:\ 1cestart.exe /terminal :_loop tasklist /FI "IMAGENAME eq 1cv8s.exe" /FI "USERNAME eq %USERNAME%" | find "1cv8s.exe" && goto :_wait tasklist /FI "IMAGENAME eq 1cv8c.exe" /FI "USERNAME eq %USERNAME%" | find "1cv8c.exe" && goto :_wait tasklist /FI "IMAGENAME eq 1cv8.exe" /FI "USERNAME eq %USERNAME%" | find "1cv8.exe" && goto :_wait logoff exit /b :_wait 1>nul ping localhost -n 5 goto :_loop exit /b | Все работает отлично, но есть один момент. Когда пользователи работают, то процес wmiprvse.exe (запущен от NETWORK SERVICE) использует процессорные ядра на 100%. Опытным путем и с помощью утилиты ProcMon было выявлено, что при отработке команды tasklist, процесс wmiprvse.exe делает огромное количество обращений к файлу tzres.dll. Попутно нашлась информация, что утилита tasklist использует WMI. Хотел узнать, есть ли консольная утилита, аналог tasklist, чтоб умела фильтровать процессы по пользователям и не использовала WMI? PSList от SysInternals не подходит, т.к. не умеет определять от какого пользователя был запущен тот или иной процесс. UPD: Придумал решение, используя CMDOW. Теперь батник выглядит так: Код: cmdow @ /HID @echo off "%ProgramFiles(x86)%\1cv82\common\1cestart.exe" /terminal call ping -n 5 127.0.0.1 > nul :_loop for /f "tokens=8" %%a in ('cmdow.exe /T') do ( if /i "%%a"=="1cv8s" goto :_wait if /i "%%a"=="1cv8c" goto :_wait if /i "%%a"=="1cv8" goto :_wait ) logoff exit /b :_wait call ping -n 5 127.0.0.1 > nul goto :_loop |
| Всего записей: 2 | Зарегистр. 21-06-2006 | Отправлено: 01:25 19-11-2011 | Исправлено: 1vladal1, 23:03 19-11-2011 |
|