Вопрос по макросам и передаче их значений в скрипты (как параметров)

Started by Anth0ny, October 16, 2008, 05:09:30 PM

Previous topic - Next topic

Anth0ny

Приветствую!

Возникли следующие 2 вопроса:

1. Если я на сервере отслеживаю состояние сервиса (например spooler) через System.ServiceState(spooler), то %1 всегда возвращает именно System.ServiceState(spooler). Можно ли каким-то образом получать только значение, заключённое в ()? т.е. в данном случае только само значение spooler.

2. вытекает из первого вопроса. если я хочу автоматически перезагружать сервис spooler, я

а) создаю Action на сервере: Reset My Service \ Execute action on remote agent\ %a \ ResetService
б) создаю запись в конфиге Агента: ActionShellExec = ResetService:sc stop spooler && sc start spooler
в) создаю привязку Action "Reset My Service" к Event "SYS_SERVICE_DOWN" через Event Processing Policy
г) создаю DCI и добавляю в свойства DCI параметр Threshold: Last polled value - Not equal - 0 - SYS_SERVICE_DOWN

а вот теперь собственно вопрос: если я хочу сделать Reset My Service универсальным Action для ЛЮБОГО сервиса, как мне модифицировать строку ActionShellExec = ResetService:sc stop spooler && sc start spooler

может быть так? ActionShellExec = ResetService:sc stop %1 && sc start %1

и вот тут всплывает первый вопрос: %1 - возвращает не только название сервиса "spooler", но так же содержит и метод проверки "System.ServiceState".

Прошу помочь.
:)

Victor Kirhenshtein

Могу предложить два варианта:

1. Сделать скрипт под названием, скажем, "extract_arg":

sub main()
{
   if ($event->parameters[1] ~= ".*\((.*)\)")
      return $1;
   return "";
}


И вместо %1 использовать %[extract_arg]

2. Прописывать  название сервиса в поле Instance и использовать %6 вместо %1.

И в том, и в другом варианте конфиг агента можно сделать как


ActionShellExec = ResetService:sc stop $1 && sc start $1


а в конфигурации action'a на сервере использовать соответственно

ResetService %[extract_arg]

или

ResetService %6