Скажем, у меня есть список сервисов, начинающихся с имени «MyServiceFactory -». Не все из них будут запущены, только несколько, и это зависит от использования службы. Я ищу помощь в написании пакетной программы, которая останавливает только запущенные службы и запускает эти службы (не все службы и не перезапускает). Любая помощь приветствуется
Пакетная программа для остановки запущенных служб
Ответы (2)
Это должно работать (или, по крайней мере, дать вам начало):
@echo off
setlocal
if "%~1"=="" goto usage
set tmpFile=templist.txt
set tmpAnsi=templist_ansi.txt
wmic /locale:MS_409 service where "caption like '%~1' and state='Running'" get caption /format:csv >%tmpFile%
REM this is required to convert from Unicode(UCS-2) to ANSI
type %tmpFile%>%tmpAnsi%
Echo ---------------Stopping services----------------------
Echo.
for /f "tokens=2 skip=2 delims=," %%i in (%tmpAnsi%) do (
wmic /locale:MS_409 service where caption="%%i" call stopservice
)
Echo --------------Starting services-----------------------
Echo.
for /f "tokens=2 skip=2 delims=," %%i in (%tmpAnsi%) do (
wmic /locale:MS_409 service where caption="%%i" call startservice
)
goto end
:usage
Echo.
Echo Usage is:
Echo %~n0 pattern_to_check
Echo.
Echo Pattern:
Echo [ ] Any one character within the specified range ([a=f]) or set ([abcdef]).
Echo ^^ Any one character not within the range ([^a=f]) or set ([^abcdef].)
Echo %% Any string of 0 (zero) or more characters
Echo _ (underscore) Any one character. Any literal underscore
Echo used in the query string must be escaped by placing it inside []
Echo.
Echo If pattern contains spaces, it must be enclosed in double quotes
:end
Предполагая, что вы назвали свой пакетный файл batch.bat, вы бы назвали его batch.bat "MyServiceFactory -%"
.
person
wmz
schedule
16.02.2012
спасибо ... я получаю Node, когда запускаю вышеуказанное. попробую отладить еще
- person G33kKahuna; 16.02.2012
Это означает, что ему не удалось найти какие-либо запущенные службы с заданным заголовком (описательное имя, как видно в инструменте «Службы»). Я предположил, что это то, что вы имели в виду под именем, поскольку оно включало пробел, но есть также внутреннее имя службы. Лучше запустить
wmic
. В приглашении wmic введите exec service get name,caption,displayname,state
— это покажет вам все службы, их заголовок, отображаемое имя и состояние. Запустите первый запрос из пакета напрямую, пока не получите желаемый результат, изменяя его по мере необходимости, а затем настройте пакет.
- person wmz; 16.02.2012
@ G33kKahuna Извините, забыл обратиться к вам раньше ... посмотрите, это должно помочь
- person wmz; 16.02.2012
спасибо wmz .. ваш код помог мне, я понял свою командную строку wmic. Это помогает. powershell пока запрещен
- person G33kKahuna; 17.02.2012
Вы также можете попробовать использовать PowerShell. У меня есть несколько однострочников, которые я использую для запуска и остановки наших сервисов:
# Start all services with FOO in their name:
powershell -Command start-service *FOO*
# Stop all running FOO services:
powershell -Command stop-service *FOO*
Недостатком является то, что команда PowerShell не дает вам статус о том, что происходит с сервисом, как это делает net start
, но вам должна понравиться краткость :)
person
Patrick Cuff
schedule
16.02.2012
+1 за упоминание PS. Примерный эквивалент 1-лайнера в PS:
get-wmiobject win32_service -filter "name like 'srv_name_pattern' and state='Running'"| foreach { stop-service $_.name; start-service $_.name}
- person wmz; 16.02.2012