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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] батник для управления сервисами (http://forum.oszone.net/showthread.php?t=174972)

registeruser1 05-05-2010 23:57 1407611

батник для управления сервисами
 
...Люди добрые помогите!
Знаю что есть тут гуру по командам для батников...

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

Код:

@echo off
echo.
echo *******************************************************************************
@echo.
echo PLEASE WAIT... SCANING SERVICES:
@echo.                       
echo *******************************************************************************
echo.
setlocal enabledelayedexpansion
set server=\\server_name
ping -n 1  %server:~2% 1>nul 2>nul || ( echo NO RESPOND FROM SERVER, EXITING... & pause & exit ) 
title Scanning
set "sernum=100"
for /f "tokens=1*" %%a in ('sc %server% query state^= all') do (
if /i .%%a equ .SERVICE_NAME: set "_servicen_=%%b" && title Scanning %server%: %%b
if /i .%%a equ .DISPLAY_NAME: echo %%b | find /i "Windows" 1>nul && (
echo %%b
set /a sernum += 1
set "_service_!sernum:~1!=!_servicen_!"
set "_serviced_!sernum:~1!=%%b"
)
)
:display
TITLE WELCOME
cls
if errorlevel 0 @echo 
echo.
echo *******************************************************************************
@echo.
echo STARTING/STOPPED SERVICES MENU:
@echo.
echo *******************************************************************************
echo.
for /f "tokens=2,3* delims=_=" %%a in ('set _service_') do (
for /f "tokens=4" %%s in ('sc %server% query %%b ^| findstr /r /b /c:" *STATE " ') do (
set "_displ_=!_serviced_%%a!                                                "
echo.%%a !_displ_:~0,58! %%s
)
)
echo. 
TITLE WELCOME
set "reply=0"
set /p reply="Please select number for start/stop and press Enter (0=RESCAN): "
set "reply=00%reply: =%"
set "reply=%reply:~-2%"
if %reply% == 00 goto :display
if not defined _service_%reply% echo Service %reply% not defined & pause & exit
sc %server% query !_service_%reply%! | findstr /r /b /c:" *STATE " | 1>nul find "RUNNING" && 1>nul sc %server% stop !_service_%reply%! || 1>nul sc %server% start !_service_%reply%! 
goto :display

Этот код сканирует сервисы по фильтру (для примера я взял сервисы с названием Windows, их там 7 в инглиш версии) на удаленном компе (set server=\\server_name, можно и локальный подставить) выдает весь найденный список и предлагает выбрать номер сервиса который нужно - если он остановлен, то запустить - если запущен, то остановить. По сути все работает, если без специфик.
Но, запускает он сервис только в том случае если "STATUS_TYPE" (тип запуска) НЕ "DISALED", а у меня на всех мне нужных сервисах именно "DISALED" !!!

Задача не из легких конечно, потому на гуру командной строи и надеюсь...

Как видите все построенно на переменных. Никакого ручного прописывания названий сервисов НЕТ! В этом весь смысл... Нужно именно этого и придерживаться.


СУТЬ ЗАДАЧИ -

ЗАПУСК СЕРВИСА
Значит нужно что бы после сканирования всех сервисов и выдачи результатов поиска по установленному фильтру (в данном случае это отфильтрованные сервисы "Windows"), вводя номер сервиса сначала тип запуска сервиса из состояния "DISABLED" переводился в состояние "AUTO_START", потом запускался...

ОСТАНОВКА СЕРВИСА
Вводя номер сервиса сначала тип запуска сервиса из состояния "AUTO_START" переводился в состояние "DISABLED", потом останавливался...


ВСЯ ПРОБЛЕМА ИМЕННО В ПЕРЕМЕННЫХ.

Очень надеюсь на вашу помощь, профи!...

El Sanchez 06-05-2010 13:16 1407931

Цитата:

Цитата registeruser1
ЗАПУСК СЕРВИСА »

Код:

sc config MyService start= auto 1>nul 2>&1
sc start MyService 1>nul 2>&1 или net start MyService /yes 1>nul 2>&1

Цитата:

Цитата registeruser1
ОСТАНОВКА СЕРВИСА »

Код:

sc stop MyService 1>nul 2>&1 или net stop MyService /yes 1>nul 2>&1
sc config MyService start= disabled 1>nul 2>&1


registeruser1 06-05-2010 13:58 1407950

El Sanchez Спасибо, это работает...

Но в моем случае MyService не нужно что бы в ручную был прописан...
В том то и дело что цель именно что бы он по переменным ( ТИПА - sc %server% query !_service_%reply%! ) смотрел какой сервис остановился или запустился в том сервисе и ставить тип запуска "AUTO_START" или "DISABLED". Просто я всех команд не знаю и с переменными не работал ни когда...
Я же код выложил, скопируй его, сделай расширение BAT, потом выставь службе "Windows Installer" тип запуска "DISABLED" и этим батником запусти ее. Я думаю что все будет ясно дальше... Она не запустится - потому что тип запуска именно "DISABLED".

Хорошо, поставлю не много по иному вопрос для ясности -

КАК НЕ ПРОПИСЫВАЯ В РУЧНУЮ ИМЕНА СЕРВИСОВ ПОМЕНЯТЬ ТИП ЗАПУСКА С "DISABLED" НА "AUTO_START" ПЕРЕД ЗАПУСКОМ В ЗАПУСКАЕМОЙ, И С "AUTO_START" НА "DISABLED" ПЕРЕД ОСТАНОВКОЙ В ОСТАНАВЛИВАЕМОЙ В ДАННЫЙ МОМЕНТ СЛУЖБЕ В МОЕМ КОДЕ...???

El Sanchez 06-05-2010 18:30 1408164

registeruser1,
Я думал вы самостоятельно замените строки...

Короче, предпоследнюю строку заменить на
Код:

sc %server% query !_service_%reply%! | findstr /r /b /c:" *STATE " | 1>nul find "RUNNING" && (1>nul sc %server% stop !_service_%reply%! & sc %server% config !_service_%reply%! start= disabled 1>nul 2>&1)||(sc %server% config !_service_%reply%! start= auto 1>nul 2>&1 & 1>nul sc %server% start !_service_%reply%!)
P.S. Не следует забывать, что многие службы зависят от других служб.

registeruser1 06-05-2010 19:41 1408198

El Sanchez
...Спасибо огромное! Я уж думал что не получится. Еще раз благодарю!

Может за одно подскажете, как можно надписи в одной сторке батника раскрасить несколькими цветами?

El Sanchez 06-05-2010 20:08 1408212


Цитата:

Цитата registeruser1
Может за одно подскажете, как можно надписи в одной сторке батника раскрасить несколькими цветами? »

На форуме - с помощью тега color
Текст скрипта - в текстовом редакторе типа Word
Вывод в консоль - никак. Только все вместе одним цветом (см. команду color /?). P.S. Такое возможно в PowerShell.

registeruser1 06-05-2010 21:26 1408281

Цитата:

Цитата El Sanchez
На форуме - с помощью тега color
Текст скрипта - в текстовом редакторе типа Word
Вывод в консоль - никак. Только все вместе одним цветом (см. команду color /?). P.S. Такое возможно в PowerShell. »

Спасибо, понятно.

Еще вопрос такой - нужно примапить диск и сразу что бы название прописано было для него.

Код:

net use z: \\comp_name\share_folder /PERSISTENT:YES
Что куда дописать нужно?

Iska 07-05-2010 01:55 1408396

Цитата:

Цитата El Sanchez
Цитата:

Цитата registeruser1
Может за одно подскажете, как можно надписи в одной сторке батника раскрасить несколькими цветами? »

Вывод в консоль - никак. Только все вместе одним цветом (см. команду color /?). P.S. Такое возможно в PowerShell. »

В принципе, при большом желании и использовании сторонних утилит (вместо встроенной «echo»), например, той же «echox.exe» из комплекта Shell Scripting Toolkit
можно.
Код:

@echo off
cls
echo **********
echox.exe -n -c 09 "Я "
echox.exe -n -c 0A "умею "
echox.exe -n -c 0B "рисовать "
echox.exe -n -c 0C "самыми "
echox.exe -n -c 0D "разными "
echox.exe    -c 0E "цветами"
echo **********

Код:

**********
Я умею рисовать самыми разными цветами
**********


registeruser1 07-05-2010 06:45 1408434

Цитата:

Цитата Iska
Только все вместе одним цветом (см. команду color /?). »

Спасибо за ответ, понятно.

amel27 07-05-2010 13:24 1408635

Цитата:

Цитата Iska
при большом желании и использовании сторонних утилит »

при большом желании можно и без сторонних утилит
читать дальше »
Код:

@Echo Off

Find "ansi.sys" "%SystemRoot%\system32\config.nt" >Nul||^
Echo device=%%systemroot%%\system32\ansi.sys>>"%SystemRoot%\system32\config.nt"&&^
Start "" "%~0" %*&& Exit /B 1

Echo **********
command.com /C ECHO  Я
command.com /C ECHO  умею
command.com /C ECHO  рисовать
command.com /C ECHO  самыми
command.com /C ECHO  разными
command.com /C ECHO  цветами
Echo **********

Pause >Nul


статья: Using ANSI sequences to enhance batch files


Время: 09:15.

Время: 09:15.
© OSzone.net 2001-