powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка сервисов в *.bat скрипте
6 сообщений из 6, страница 1 из 1
Обработка сервисов в *.bat скрипте
    #39249651
Eugene DMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно кто-то подскажет как можно обрабатывать сервисы в данном случае.

Скажем, есть конфиг файл, где хранятся определенные поля -
---
ID|124
SERVICE_TITLE|service1,service2
---

В результате хотелось бы получить вывод результата в таком виде.

===
if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server1)
call powershell .\script.ps1 stopservice service1 on server1
call powershell .\script.ps1 stopservice service2 on server1

if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server2)
call powershell .\script.ps1 stopservice service1 on server2
call powershell .\script.ps1 stopservice service2 on server2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server1)
call powershell .\script.ps1 startservice service1 on server1
call powershell .\script.ps1 startservice service2 on server1

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server2)
call powershell .\script.ps1 service1 startservice service1 on server2
call powershell .\script.ps1 service2 startservice service2 on server2
===

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
@echo *********************************************************************************
@echo Pre-SymLink creation stage on %servers%
@echo The following actions will be performed: %ACTION%
@echo On the following servers: %servers%
@rem setting sequence to PRESL
@set EXEC_SEQUENCE=PRESL
@call :parse "%servers%"
@if errorlevel 1 goto PRESUBFAIL

@echo *********************************************************************************
@echo STAGE: Copying the software to target servers
@set EXEC_SEQUENCE=COPYING
@echo .
@echo INITIATING COPY SUBROUTINE TO %servers%
@call :parse "%servers%"
@if errorlevel 1 goto COPYSUBFAIL

@rem setting sequence to POSTSL
@set EXEC_SEQUENCE=POSTSL
@echo Post-SymLink creation stage on %servers%
@echo The following actions will be performed: %ACTION%
@echo On the following servers: %servers%
@call :parse "%servers%"
@if errorlevel 1 goto POSTSUBFAIL

exit /b 0

:parse
@setlocal
@set list=%1
@set list=%list:"=%
@FOR /f "tokens=1* delims=," %%a IN ("%list%") DO (
  @if not "%%a" == "" call :sub %%a
  @if not "%%b" == "" call :parse "%%b"
)
@endlocal
@exit /b

:parse_service 
@echo Start of parse_service sub
@set services=%3
@set services=%services:"=%
@FOR /f "tokens=1* delims=," %%k IN ("%services%") DO (
  @if not "%%k" == "" call :PROCSUB %%k %4 %5
  @if not "%%l" == "" call :parse_service MOO WOO "%%l"
)
@exit /b

:sub
@setlocal
copy D:\bamboo\AQRScripts\release_scripts\*.ps1 .\
@IF "%EXEC_SEQUENCE%"=="PRESL" goto PRESUB
@IF "%EXEC_SEQUENCE%"=="POSTSL" goto POSTSUB
@IF "%EXEC_SEQUENCE%"=="COPYING" goto COPYSUB

:PRESUB
@echo *********************************************************************************
@echo Subroutine: %EXEC_SEQUENCE%
@echo FOR SERVER %1

if "%PSHELLSTOP_SERVICE%" NEQ "" (call :parse_service MOO FOO "%SERVICE_TITLE%" stop service on %1)

@echo Completed pre-SymLink operations on App Servers
@goto FINSUB

:POSTSUB
@echo *********************************************************************************
@echo Subroutine: %EXEC_SEQUENCE%
@echo FOR SERVER %1

if "%PSHELLSTART_SERVICE%" NEQ "" (call :parse_service MOO FOO "%SERVICE_TITLE%" start service on %1)

@echo Completed post-SymLink operations on App Servers
@goto FINGSUB

:PROCSUB
@setlocal
@rem execute powershell

@echo call powershell .\script.ps1 %1

@endlocal
@exit /b 



Сейчас скрипт отрабатывает таким образом:
===
if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server1)
call powershell .\script.ps1 service1
call powershell .\script.ps1 service2

if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server2)
call powershell .\script.ps1 service1
call powershell .\script.ps1 service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server1)
call powershell .\script.ps1 service1
call powershell .\script.ps1 service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server2)
call powershell .\script.ps1 service1
call powershell .\script.ps1 service2
===
...
Рейтинг: 0 / 0
Обработка сервисов в *.bat скрипте
    #39249745
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модифицируй третью от конца строку кода, которая
Код: powershell
1.
@echo call powershell .\script.ps1 %1
...
Рейтинг: 0 / 0
Обработка сервисов в *.bat скрипте
    #39250492
Eugene DMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
Да, но интересно надо ли использовать IF statement:

if "%PSHELLSTOP_SERVICE%" NEQ "" (@echo call powershell .\script.ps1 stopservice %1 || @echo failed to start service "%SERVICE_TITLE%" on %1)
if "%PSHELLSTART_SERVICE%" NEQ "" (@echo call powershell .\script.ps1 startservice %1 || @echo failed to start service "%SERVICE_TITLE%" on %1)
...
Рейтинг: 0 / 0
Обработка сервисов в *.bat скрипте
    #39250496
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо
...
Рейтинг: 0 / 0
Обработка сервисов в *.bat скрипте
    #39251482
Eugene DMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде получилось, после того как изменил строку -

Код: powershell
1.
@echo call powershell .\script.ps1 %2 %1



выдает такой результат, только почему-то не выдает нужную команду stop/start для второго сервиса, хотя оба сервиса обрабатываются:

if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server1)
Start of parse_service sub
call powershell .\script.ps1 stop service1
call powershell .\script.ps1 service2

if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stop service on server2)
Start of parse_service sub
call powershell .\script.ps1 stop service1
call powershell .\script.ps1 service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server1)
Start of parse_service sub
call powershell .\script.ps1 start service1
call powershell .\script.ps1 service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" start service on server2)
Start of parse_service sub
call powershell .\script.ps1 start service1
call powershell .\script.ps1 service2
...
Рейтинг: 0 / 0
Обработка сервисов в *.bat скрипте
    #39254541
Eugene DMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался, как сделать так чтобы скрипт отрабатывал таким образом:
if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stopservice on server1)
Start of parse_service sub
call powershell .\script.ps1 stopservice service1
call powershell .\script.ps1 stopservice service2

if "stopservice" NEQ "" (call :parse_service MOO FOO "service1,service2" stopservice on server2)
Start of parse_service sub
call powershell .\script.ps1 stopservice service1
call powershell .\script.ps1 stopservice service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" startservice on server1)
Start of parse_service sub
call powershell .\script.ps1 startservice service1
call powershell .\script.ps1 startservice service2

if "startservice" NEQ "" (call :parse_service MOO FOO "service1,service2" startservice on server2)
Start of parse_service sub
call powershell .\script.ps1 startservice service1
call powershell .\script.ps1 startservice service2

Интересно как можно вывести такой результат, который бы по очереди выполнялся на каждом сервере:
call powershell .\script.ps1 startservice service1 server1
call powershell .\script.ps1 startservice service2 server2
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка сервисов в *.bat скрипте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]