Войти

Показать полную графическую версию : [решено] вопрос: контроль за службой


Страниц : 1 [2] 3

amel27
31-01-2008, 03:56
Logon-скрипт - очень любопытно! поясни! »
Пуск\Выполнить: gpedit.msc
Путь: Конфигурация пользователя\Конфигурация Windows\Сценарии

сюда можно добавлять любые *.BAT, *.CMD, *.VBS или *.JS скрипты на вход и выход... правда локальные политики (в отличие от доменных) отрабатывают одинаково для всех локальных пользователей, поэтому распознавание пользователей придется встраивать в скрипт... вот доработанный вариант батника, который:

для пользователя USER-1: останавливает и отключает службу Планировщика задач и перегружает "Обозреватель"
для пользователя USER-2: восстанавливает состояние Планировщика и перезапускает службу Диспетчера печати.@echo off

IF "%USERNAME%"=="User-1" (
CALL :SC_STOP SCHEDULE
CALL :SC_DISABLE SCHEDULE
CALL :SC_RESTART BROWSER
)

IF "%USERNAME%"=="User-2" (
CALL :SC_ENABLE SCHEDULE
CALL :SC_START SCHEDULE
CALL :SC_RESTART SPOOLER
)

EXIT

:SC_STOP
:: -----
Set STATUS=RUNNING
@echo Остановка сервиса "%1"...
:SC_STOP_LOOP
SC STOP %1 >nul
For /F "Tokens=3 Usebackq Delims=: " %%i in (`SC QUERY %1^|FIND "STATE"`) Do SET STATUS=%%i
If NOT "%STATUS%"=="STOPPED" GOTO :SC_STOP_LOOP
@echo Сервис остановлен!
:: -----
GOTO :EOF

:SC_START
:: -----
Set STATUS=STOPPED
@echo Запуск сервиса "%1"...
:SC_START_LOOP
SC START %1 >nul
For /F "Tokens=3 Usebackq Delims=: " %%i in (`SC QUERY %1^|FIND "STATE"`) Do SET STATUS=%%i
If NOT "%STATUS%"=="RUNNING" GOTO :SC_START_LOOP
@echo Сервис запущен!
:: -----
GOTO :EOF

:SC_RESTART
:: -----
CALL :SC_STOP %1
CALL :SC_START %1
:: -----
GOTO :EOF

:SC_ENABLE
:: -----
SC CONFIG %1 start= demand >nul
@echo Сервис %1 включен!
:: -----
GOTO :EOF

:SC_DISABLE
:: -----
SC CONFIG %1 start= disabled >nul
@echo Сервис %1 отключен!
:: -----
GOTO :EOF

foxbat
31-01-2008, 09:26
Есть подробная информация по возможностям командной строки ? в справочнике параметров по командной строке (v 1.1) я не нахожу описания и поэтому не могу разобрать например такие операторы

@echo off
If "%1"=="" Exit
Set STATUS=RUNNING

@echo Остановка сервиса "%1"...
:LBL0
SC STOP %1 >nul 2>&1
For /F "Tokens=3 Usebackq Delims=: " %%i in (`SC QUERY %1^|FIND "STATE"`) Do SET STATUS=%%i
If NOT "%STATUS%"=="STOPPED" GOTO :LBL0
SC START %1 >nul 2>&1
@echo Произведен перезапуск сервиса!

HLT
31-01-2008, 09:54
For /F "Tokens=3 Usebackq Delims=: »
Хорошее описание токенсов и делимсов тут: http://www.robvanderwoude.com/ntfortokens.html

amel27
31-01-2008, 10:12
Есть подробная информация по возможностям командной строки ? »
кое-что по-русски:
http://www.windowsfaq.ru/content/category/3/19/57/
http://www.windowsfaq.ru/content/category/3/7/45

SavmiN
01-02-2008, 01:57
локальные политики (в отличие от доменных) »
ну и попутный вопрос! - для домена на отдельном находящемся ПК - тоже в GP можно настроить для каждого или всех сразу свои сценарии??
а также: USER-1 - это имя учетной записи - а пароль как указывать для автологона? ну и совсем плохой вопрос - что такое в данном случае "%1" = что то припоминаю …

HLT, описание токенсов и делимсов - ну раз начали издеваться - то хотя бы на понятном русском языке %))) чтобы прочесть была возможность! ;)

amel27
01-02-2008, 05:52
в GP можно настроить для каждого или всех сразу свои сценарии?? »в домене GPO привязываются к подразделениям (OU), соответственно политики отрабатывают для всех пользователей, входящих в этот контейнер... а уж сколько создавать OU и как по ним раскидывать пользователей - вопрос планирования.
USER-1 - это имя учетной записи - а пароль как указывать для автологона? »скрипт отработает автоматически после регистрации пользователя, пароль не нужен
что такое в данном случае "%1" »макрос, заменяемый при выполнении на значение первого параметра, переданного скрипту (или процедуре)

foxbat
01-02-2008, 13:12
если не трудно разьясните пож-та эту строку, я что понял сам откаментирую а вы меня поправте если не так:
SC STOP %1 >nul 2>&1
SC - команда cmd
STOP - команда (параметр) команды SC
%1 - параметр командной строки, в данном случае название сервиса
-до этого момента понятно, а дальше
>nul - ?? некое пустое устройство-файл, т.е. перенаправляем вникуда, (отчего ничего не видим в консоли когда выполняем команду)
2>&1 - "2>&1" это дублирование дескрипторов, т.е. выход дескриптора 2 (Ошибка вывода) направляется в дескриптор 1 (Вывод командной строки), так ? только с НУЛом у меня всё равно пустой экран. Вот к примеру пускаю В CMD


X:\>sc stop W32Time

SERVICE_NAME: W32Time
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 3 STOP_PENDING
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x1
WAIT_HINT : 0x3e8

X:\>sc stop W32Time >nul

ничего нет

X:\>sc stop W32Time >nul 2&>1

тоже ничего нет

SavmiN
01-02-2008, 17:08
amel27, у вас указано: Планировщик - "SCHEDULE", а после Сервер печати - "Spooler" ну и ещё "Browser"
У Планировщика исполняемый файл schedule.exe, у brouser - explorer.exe не знаю по печати, но вот сам вопрос: на Пк установлена оболочка Pshell с исполняемым файлом pshell.exe - как мне указывать его в коде? - это ведь не стандартная служба или сервис Windows … также имеется ещё одна программа за которой требуется наблюдение и перезапуск в случае сбоя или умышленной попытки отключения classic.exe - какое имя требуется задать в коде?
Спасибо!

amel27
01-02-2008, 17:12
только с НУЛом у меня всё равно пустой экран »можешь убрать 2&>1 - подавляет сообщения об ошибках... если ошибок нет то и перенаправлять нечего

как мне указывать его в коде? »
смотри имя ключа реестра в "HKLM\SYSTEM\CurrentControlSet\Services" (искать можно по полному имени сервиса или имени образа pshell.exe)

SavmiN
03-02-2008, 19:26
amel27, отлично! - осталось уточнить - уточняю ;) для "User-2"CALL :SC_ENABLE SCHEDULE
CALL :SC_START SCHEDULE » - это запуск программы при загрузке - а где наблюдение? - если в случае сбоя произойдЁт отключение SCHEDULE - потребуется его повторный запуск, а при невозможности ребут ОС !!!
поясни пожалуйста !!!
Спасибо!

amel27
04-02-2008, 04:17
а где наблюдение? »команда запуска не пойдет дальше пока не запустит сервис, поэтому если сервис глюканет и не запустится скрипт зависнет в цикле... для перезагрузки нужно ставить условный выход из цикла по таймауту или количеству проверок

SavmiN
04-02-2008, 18:46
условный выход из цикла по таймауту или количеству проверок »
вот вот! то что и требовалось! - удели плиз несколько минут, если не сложно - подкоректировать с остановкой и ребутом ПК!
К примеру, если в течении минуты не запученна программа - то ПК перезагружается или отключается (во избежание самопроизвольного ребута)
Спасибо!

amel27
06-02-2008, 09:42
удели плиз несколько минут, если не сложно - подкоректировать с остановкой и ребутом ПК »что-нибудь типа такого?@echo off

Set TIMEOUT=10 Rem таймаут ожидания в секундах
Set MXCOUNT=6 Rem количество попыток запуска/остановки

Set TCOUNT=%MXCOUNT%

IF "%USERNAME%"=="User-1" (
CALL :SC_STOP SCHEDULE
CALL :SC_DISABLE SCHEDULE
CALL :SC_RESTART BROWSER
)
IF "%USERNAME%"=="User-2" (
CALL :SC_ENABLE SCHEDULE
CALL :SC_START SCHEDULE
CALL :SC_RESTART SPOOLER
)
EXIT

:SC_STOP
CALL :EX_REBOOT %TCOUNT%
Set TCOUNT=%MXCOUNT%
Set STATUS=
@echo Остановка сервиса "%1"...
:SC_STOP_LOOP
Set /A TCOUNT-=1
SC STOP %1 >nul
CALL :EX_SLEEP %TIMEOUT%
For /F "Tokens=3 Usebackq Delims=: " %%i in (`SC QUERY %1^|FIND "STATE"`) Do SET STATUS=%%i
If "%STATUS%"=="STOPPED" GOTO :EOF
If %TCOUNT% GTR 0 GOTO :SC_STOP_LOOP

:SC_START
CALL :EX_REBOOT %TCOUNT%
Set TCOUNT=%MXCOUNT%
Set STATUS=
@echo Запуск сервиса "%1"...
:SC_START_LOOP
Set /A TCOUNT-=1
SC START %1 >nul
CALL :EX_SLEEP %TIMEOUT%
For /F "Tokens=3 Usebackq Delims=: " %%i in (`SC QUERY %1^|FIND "STATE"`) Do SET STATUS=%%i
If "%STATUS%"=="RUNNING" GOTO :EOF
If %TCOUNT% GTR 0 GOTO :SC_START_LOOP

:SC_ENABLE
CALL :EX_REBOOT %TCOUNT%
SC CONFIG %1 start= demand >nul
@echo Сервис %1 включен!
GOTO :EOF

:SC_DISABLE
CALL :EX_REBOOT %TCOUNT%
SC CONFIG %1 start= disabled >nul
@echo Сервис %1 отключен!
GOTO :EOF

:SC_RESTART
CALL :SC_STOP %1
CALL :SC_START %1
GOTO :EOF

:EX_SLEEP
Ping -n %1 127.0.0.1 >nul
GOTO :EOF

:EX_REBOOT
If %1 EQU 0 (
Shutdown -r -f -t 10 -c "Превышен таймаут ожидания"
EXIT
)
GOTO :EOF

SavmiN
06-02-2008, 12:42
типа такого »
ну наверное - пойду пробовать - расскажу позже!

SavmiN
08-02-2008, 14:24
amel27, рассказываю
при старте ОС кратковременно появляется окошко cmd и усЁ %(
пробую отключать наблюдаемую службу - хм.. отключается и ничего не происходит - не востанавливается, сообщения никакого нет! ребута нет %(
подскажИте ?

amel27
09-02-2008, 12:54
при старте ОС кратковременно появляется окошко cmd и усЁ »а ты чего хотел - чтобы скрипт крутился бесконечно?.. изначально вопрос стоял о запуске скрипта при загрузке, если тебе нужно перегружать сервис периодически - ставь скрипт в планировщик задач. Кстати, проверить REBOOT можно вбив имя несуществующего сервиса - эффект тот же, что и при потере связи с сервисом.

SavmiN
09-02-2008, 18:34
запуске скрипта при загрузке » и наблюдении им за процессом pshell.exe
вот я и пытался его (pshell.exe) отключать - отключаю - но востановления не происходит! %(
проверить REBOOT можно вбив имя несуществующего сервиса » - поясни! в смысле для "User-2" к примеру чтото типа
IF "%USERNAME%"=="User-2" (
CALL :SC_ENABLE SCHEDULE 123
CALL :SC_START SCHEDULE 123
CALL :SC_RESTART SPOOLER »
так чтоли ?

amel27
11-02-2008, 12:01
наблюдении им за процессом pshell.exe »
в чем заключается "наблюдение"?.. запустить если остановился?... или периодически перегружать чтобы убедиться что он не завис?.. и какой наконец у него ID (тот что из реестра), т.к. "pshell.exe" это имя образа

отключаю - но востановления не происходит! »
естественно, так как скрипт стоит в автологоне, т.е. отрабатывает однократно - при регистрации пользователя, для постоянной проверки нужно использовать планировщик задачв смысле для "User-2" к примеру чтото типа »
SCHEDULE - ID службы планировщика задач
SPOOLER - ID службы диспетчера печати

:SC_DISABLE - отключить службу;
:SC_ENABLE - включить службу;
:SC_START - запустить службу;
:SC_STOP - остановить службу;
:SC_RESTART - SC_STOP+SC_START

SavmiN
11-02-2008, 15:43
ID (тот что из реестра »
В общем-то я так и не нашел отдельного ID на "pshell.exe"
Возможно причина в том что именно эта программа не запускается службой ?

Но и даже та программа, которая запускается как служба (в частности - имя службы "GccServ" - это и есть ID? ) не получает наблюдения и рестарта в случае отключения или сбоя во время работы ПК

наблюдение"?.. запустить если остановился?... » или умышлено отключили процесс

Примерно так! Ппрограмма GC.exe управляет включением и остановкой(блокирует) ПК. Программа Pshell.exe - оболочка на ПК - ограничивает возможности пользователя и востанавливает GC.exe при перезапуске ОС - но не в процессе работы.
Тоесть - если отключить процесс pshell.exe то можно остановить процесс GC.exe и службу GCServ - и как следствие играться на ПК без ограничения времени. Вот и требуется наблюдение за процессами pshell.exe; gc.exe и службой GCServ и в случае их отключения или остановки - Вывести сообщение на экран "Чтото типа штраф 200 грн за умышленное отключение служб контроля" и снова их перезапустить или вырубить ПК.
Мда!! надо было сразу так обЪяснить Сорри!

amel27
12-02-2008, 11:32
надо было сразу так обЪяснить » :yes:
"GccServ" - это и есть ID? »мне отсюда не видно, проверь NET STOP GccServ
NET START GccServ
требуется наблюдение за процессами pshell.exe; gc.exe и службой GCServ »процессы под какой учеткой стартуют?.. смотри в диспетчере задач ("Имя пользователя")




© OSzone.net 2001-2012